blob: 5d7a0aed9beffc6f36b832118160660424233a0a [file] [log] [blame]
Victor Stinner5cf47822020-11-02 22:03:28 +01001// File automatically generated by Parser/asdl_c.py.
2
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003#include "Python.h"
Victor Stinnerd36d6a92021-04-07 13:01:09 +02004#include "pycore_ast.h"
Victor Stinnere0bf70d2021-03-18 02:46:06 +01005#include "pycore_ast_state.h" // struct ast_state
6#include "pycore_interp.h" // _PyInterpreterState.ast
7#include "pycore_pystate.h" // _PyInterpreterState_GET()
Victor Stinnerd36d6a92021-04-07 13:01:09 +02008#include "structmember.h"
9#include <stddef.h>
Dino Viehlandac46eb42019-09-11 10:16:34 -070010
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020011// Forward declaration
Victor Stinner5cf47822020-11-02 22:03:28 +010012static int init_types(struct ast_state *state);
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020013
Victor Stinner5cf47822020-11-02 22:03:28 +010014static struct ast_state*
15get_ast_state(void)
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020016{
Victor Stinner5cf47822020-11-02 22:03:28 +010017 PyInterpreterState *interp = _PyInterpreterState_GET();
18 struct ast_state *state = &interp->ast;
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020019 if (!init_types(state)) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020020 return NULL;
21 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020022 return state;
Victor Stinner74419f02020-07-03 11:35:37 +020023}
Victor Stinner5cf47822020-11-02 22:03:28 +010024
Victor Stinnerfd957c12020-11-03 18:07:15 +010025void _PyAST_Fini(PyInterpreterState *interp)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020026{
Victor Stinnerfd957c12020-11-03 18:07:15 +010027 struct ast_state *state = &interp->ast;
Victor Stinner5cf47822020-11-02 22:03:28 +010028
Victor Stinner74419f02020-07-03 11:35:37 +020029 Py_CLEAR(state->AST_type);
30 Py_CLEAR(state->Add_singleton);
31 Py_CLEAR(state->Add_type);
32 Py_CLEAR(state->And_singleton);
33 Py_CLEAR(state->And_type);
34 Py_CLEAR(state->AnnAssign_type);
35 Py_CLEAR(state->Assert_type);
36 Py_CLEAR(state->Assign_type);
37 Py_CLEAR(state->AsyncFor_type);
38 Py_CLEAR(state->AsyncFunctionDef_type);
39 Py_CLEAR(state->AsyncWith_type);
40 Py_CLEAR(state->Attribute_type);
41 Py_CLEAR(state->AugAssign_type);
42 Py_CLEAR(state->Await_type);
43 Py_CLEAR(state->BinOp_type);
44 Py_CLEAR(state->BitAnd_singleton);
45 Py_CLEAR(state->BitAnd_type);
46 Py_CLEAR(state->BitOr_singleton);
47 Py_CLEAR(state->BitOr_type);
48 Py_CLEAR(state->BitXor_singleton);
49 Py_CLEAR(state->BitXor_type);
50 Py_CLEAR(state->BoolOp_type);
51 Py_CLEAR(state->Break_type);
52 Py_CLEAR(state->Call_type);
53 Py_CLEAR(state->ClassDef_type);
54 Py_CLEAR(state->Compare_type);
55 Py_CLEAR(state->Constant_type);
56 Py_CLEAR(state->Continue_type);
57 Py_CLEAR(state->Del_singleton);
58 Py_CLEAR(state->Del_type);
59 Py_CLEAR(state->Delete_type);
60 Py_CLEAR(state->DictComp_type);
61 Py_CLEAR(state->Dict_type);
62 Py_CLEAR(state->Div_singleton);
63 Py_CLEAR(state->Div_type);
64 Py_CLEAR(state->Eq_singleton);
65 Py_CLEAR(state->Eq_type);
66 Py_CLEAR(state->ExceptHandler_type);
67 Py_CLEAR(state->Expr_type);
68 Py_CLEAR(state->Expression_type);
69 Py_CLEAR(state->FloorDiv_singleton);
70 Py_CLEAR(state->FloorDiv_type);
71 Py_CLEAR(state->For_type);
72 Py_CLEAR(state->FormattedValue_type);
73 Py_CLEAR(state->FunctionDef_type);
74 Py_CLEAR(state->FunctionType_type);
75 Py_CLEAR(state->GeneratorExp_type);
76 Py_CLEAR(state->Global_type);
77 Py_CLEAR(state->GtE_singleton);
78 Py_CLEAR(state->GtE_type);
79 Py_CLEAR(state->Gt_singleton);
80 Py_CLEAR(state->Gt_type);
81 Py_CLEAR(state->IfExp_type);
82 Py_CLEAR(state->If_type);
83 Py_CLEAR(state->ImportFrom_type);
84 Py_CLEAR(state->Import_type);
85 Py_CLEAR(state->In_singleton);
86 Py_CLEAR(state->In_type);
87 Py_CLEAR(state->Interactive_type);
88 Py_CLEAR(state->Invert_singleton);
89 Py_CLEAR(state->Invert_type);
90 Py_CLEAR(state->IsNot_singleton);
91 Py_CLEAR(state->IsNot_type);
92 Py_CLEAR(state->Is_singleton);
93 Py_CLEAR(state->Is_type);
94 Py_CLEAR(state->JoinedStr_type);
95 Py_CLEAR(state->LShift_singleton);
96 Py_CLEAR(state->LShift_type);
97 Py_CLEAR(state->Lambda_type);
98 Py_CLEAR(state->ListComp_type);
99 Py_CLEAR(state->List_type);
100 Py_CLEAR(state->Load_singleton);
101 Py_CLEAR(state->Load_type);
102 Py_CLEAR(state->LtE_singleton);
103 Py_CLEAR(state->LtE_type);
104 Py_CLEAR(state->Lt_singleton);
105 Py_CLEAR(state->Lt_type);
106 Py_CLEAR(state->MatMult_singleton);
107 Py_CLEAR(state->MatMult_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800108 Py_CLEAR(state->MatchAs_type);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000109 Py_CLEAR(state->MatchClass_type);
110 Py_CLEAR(state->MatchMapping_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800111 Py_CLEAR(state->MatchOr_type);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000112 Py_CLEAR(state->MatchSequence_type);
113 Py_CLEAR(state->MatchSingleton_type);
114 Py_CLEAR(state->MatchStar_type);
115 Py_CLEAR(state->MatchValue_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800116 Py_CLEAR(state->Match_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200117 Py_CLEAR(state->Mod_singleton);
118 Py_CLEAR(state->Mod_type);
119 Py_CLEAR(state->Module_type);
120 Py_CLEAR(state->Mult_singleton);
121 Py_CLEAR(state->Mult_type);
122 Py_CLEAR(state->Name_type);
123 Py_CLEAR(state->NamedExpr_type);
124 Py_CLEAR(state->Nonlocal_type);
125 Py_CLEAR(state->NotEq_singleton);
126 Py_CLEAR(state->NotEq_type);
127 Py_CLEAR(state->NotIn_singleton);
128 Py_CLEAR(state->NotIn_type);
129 Py_CLEAR(state->Not_singleton);
130 Py_CLEAR(state->Not_type);
131 Py_CLEAR(state->Or_singleton);
132 Py_CLEAR(state->Or_type);
133 Py_CLEAR(state->Pass_type);
134 Py_CLEAR(state->Pow_singleton);
135 Py_CLEAR(state->Pow_type);
136 Py_CLEAR(state->RShift_singleton);
137 Py_CLEAR(state->RShift_type);
138 Py_CLEAR(state->Raise_type);
139 Py_CLEAR(state->Return_type);
140 Py_CLEAR(state->SetComp_type);
141 Py_CLEAR(state->Set_type);
142 Py_CLEAR(state->Slice_type);
143 Py_CLEAR(state->Starred_type);
144 Py_CLEAR(state->Store_singleton);
145 Py_CLEAR(state->Store_type);
146 Py_CLEAR(state->Sub_singleton);
147 Py_CLEAR(state->Sub_type);
148 Py_CLEAR(state->Subscript_type);
149 Py_CLEAR(state->Try_type);
150 Py_CLEAR(state->Tuple_type);
151 Py_CLEAR(state->TypeIgnore_type);
152 Py_CLEAR(state->UAdd_singleton);
153 Py_CLEAR(state->UAdd_type);
154 Py_CLEAR(state->USub_singleton);
155 Py_CLEAR(state->USub_type);
156 Py_CLEAR(state->UnaryOp_type);
157 Py_CLEAR(state->While_type);
158 Py_CLEAR(state->With_type);
159 Py_CLEAR(state->YieldFrom_type);
160 Py_CLEAR(state->Yield_type);
161 Py_CLEAR(state->__dict__);
162 Py_CLEAR(state->__doc__);
Brandt Bucher145bf262021-02-26 14:51:55 -0800163 Py_CLEAR(state->__match_args__);
Victor Stinner74419f02020-07-03 11:35:37 +0200164 Py_CLEAR(state->__module__);
165 Py_CLEAR(state->_attributes);
166 Py_CLEAR(state->_fields);
167 Py_CLEAR(state->alias_type);
168 Py_CLEAR(state->annotation);
169 Py_CLEAR(state->arg);
170 Py_CLEAR(state->arg_type);
171 Py_CLEAR(state->args);
172 Py_CLEAR(state->argtypes);
173 Py_CLEAR(state->arguments_type);
174 Py_CLEAR(state->asname);
175 Py_CLEAR(state->ast);
176 Py_CLEAR(state->attr);
177 Py_CLEAR(state->bases);
178 Py_CLEAR(state->body);
179 Py_CLEAR(state->boolop_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800180 Py_CLEAR(state->cases);
Victor Stinner74419f02020-07-03 11:35:37 +0200181 Py_CLEAR(state->cause);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000182 Py_CLEAR(state->cls);
Victor Stinner74419f02020-07-03 11:35:37 +0200183 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);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000218 Py_CLEAR(state->kwd_attrs);
219 Py_CLEAR(state->kwd_patterns);
Victor Stinner74419f02020-07-03 11:35:37 +0200220 Py_CLEAR(state->kwonlyargs);
221 Py_CLEAR(state->left);
222 Py_CLEAR(state->level);
223 Py_CLEAR(state->lineno);
224 Py_CLEAR(state->lower);
Brandt Bucher145bf262021-02-26 14:51:55 -0800225 Py_CLEAR(state->match_case_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200226 Py_CLEAR(state->mod_type);
227 Py_CLEAR(state->module);
228 Py_CLEAR(state->msg);
229 Py_CLEAR(state->name);
230 Py_CLEAR(state->names);
231 Py_CLEAR(state->op);
232 Py_CLEAR(state->operand);
233 Py_CLEAR(state->operator_type);
234 Py_CLEAR(state->ops);
235 Py_CLEAR(state->optional_vars);
236 Py_CLEAR(state->orelse);
Brandt Bucher145bf262021-02-26 14:51:55 -0800237 Py_CLEAR(state->pattern);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000238 Py_CLEAR(state->pattern_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800239 Py_CLEAR(state->patterns);
Victor Stinner74419f02020-07-03 11:35:37 +0200240 Py_CLEAR(state->posonlyargs);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000241 Py_CLEAR(state->rest);
Victor Stinner74419f02020-07-03 11:35:37 +0200242 Py_CLEAR(state->returns);
243 Py_CLEAR(state->right);
244 Py_CLEAR(state->simple);
245 Py_CLEAR(state->slice);
246 Py_CLEAR(state->step);
247 Py_CLEAR(state->stmt_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800248 Py_CLEAR(state->subject);
Victor Stinner74419f02020-07-03 11:35:37 +0200249 Py_CLEAR(state->tag);
250 Py_CLEAR(state->target);
251 Py_CLEAR(state->targets);
252 Py_CLEAR(state->test);
253 Py_CLEAR(state->type);
254 Py_CLEAR(state->type_comment);
255 Py_CLEAR(state->type_ignore_type);
256 Py_CLEAR(state->type_ignores);
257 Py_CLEAR(state->unaryop_type);
258 Py_CLEAR(state->upper);
259 Py_CLEAR(state->value);
260 Py_CLEAR(state->values);
261 Py_CLEAR(state->vararg);
262 Py_CLEAR(state->withitem_type);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700263
Victor Stinnere0bf70d2021-03-18 02:46:06 +0100264#if !defined(NDEBUG)
Victor Stinnerfd957c12020-11-03 18:07:15 +0100265 state->initialized = -1;
266#else
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200267 state->initialized = 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +0100268#endif
Dino Viehlandac46eb42019-09-11 10:16:34 -0700269}
270
Victor Stinner5cf47822020-11-02 22:03:28 +0100271static int init_identifiers(struct ast_state *state)
Dino Viehlandac46eb42019-09-11 10:16:34 -0700272{
Dino Viehlandac46eb42019-09-11 10:16:34 -0700273 if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +0300274 if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800275 if ((state->__match_args__ = PyUnicode_InternFromString("__match_args__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700276 if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700277 if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
278 if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
279 if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
280 if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
281 if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
282 if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
283 if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200284 if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700285 if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
286 if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
287 if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800288 if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700289 if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000290 if ((state->cls = PyUnicode_InternFromString("cls")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700291 if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
292 if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
293 if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
294 if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
295 if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
296 if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
297 if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700298 if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
299 if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
300 if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
301 if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
302 if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
303 if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
304 if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
305 if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
306 if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800307 if ((state->guard = PyUnicode_InternFromString("guard")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700308 if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
309 if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
310 if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
311 if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
312 if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
313 if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
314 if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
315 if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
316 if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
317 if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
318 if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
319 if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000320 if ((state->kwd_attrs = PyUnicode_InternFromString("kwd_attrs")) == NULL) return 0;
321 if ((state->kwd_patterns = PyUnicode_InternFromString("kwd_patterns")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700322 if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
323 if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
324 if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
325 if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
326 if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
327 if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
328 if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
329 if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
330 if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
331 if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
332 if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
333 if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
334 if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
335 if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800336 if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return 0;
337 if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700338 if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000339 if ((state->rest = PyUnicode_InternFromString("rest")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700340 if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
341 if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
342 if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
343 if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
344 if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800345 if ((state->subject = PyUnicode_InternFromString("subject")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700346 if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
347 if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
348 if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
349 if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
350 if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
351 if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
352 if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
353 if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
354 if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
355 if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
356 if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
357 return 1;
358};
359
Pablo Galindoa5634c42020-09-16 19:42:00 +0100360GENERATE_ASDL_SEQ_CONSTRUCTOR(mod, mod_ty)
361GENERATE_ASDL_SEQ_CONSTRUCTOR(stmt, stmt_ty)
362GENERATE_ASDL_SEQ_CONSTRUCTOR(expr, expr_ty)
363GENERATE_ASDL_SEQ_CONSTRUCTOR(comprehension, comprehension_ty)
364GENERATE_ASDL_SEQ_CONSTRUCTOR(excepthandler, excepthandler_ty)
365GENERATE_ASDL_SEQ_CONSTRUCTOR(arguments, arguments_ty)
366GENERATE_ASDL_SEQ_CONSTRUCTOR(arg, arg_ty)
367GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty)
368GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty)
369GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty)
Brandt Bucher145bf262021-02-26 14:51:55 -0800370GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty)
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000371GENERATE_ASDL_SEQ_CONSTRUCTOR(pattern, pattern_ty)
Pablo Galindoa5634c42020-09-16 19:42:00 +0100372GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty)
373
Victor Stinner5cf47822020-11-02 22:03:28 +0100374static PyObject* ast2obj_mod(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300375static const char * const Module_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200376 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800377 "type_ignores",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000378};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300379static const char * const Interactive_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200380 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000381};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300382static const char * const Expression_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200383 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000384};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300385static const char * const FunctionType_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800386 "argtypes",
387 "returns",
388};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300389static const char * const stmt_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200390 "lineno",
391 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000392 "end_lineno",
393 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000394};
Victor Stinner5cf47822020-11-02 22:03:28 +0100395static PyObject* ast2obj_stmt(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300396static const char * const FunctionDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200397 "name",
398 "args",
399 "body",
400 "decorator_list",
401 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800402 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000403};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300404static const char * const AsyncFunctionDef_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400405 "name",
406 "args",
407 "body",
408 "decorator_list",
409 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800410 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400411};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300412static const char * const ClassDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200413 "name",
414 "bases",
415 "keywords",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200416 "body",
417 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000418};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300419static const char * const Return_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200420 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000421};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300422static const char * const Delete_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200423 "targets",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000424};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300425static const char * const Assign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200426 "targets",
427 "value",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800428 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000429};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300430static const char * const AugAssign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200431 "target",
432 "op",
433 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000434};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300435static const char * const AnnAssign_fields[]={
Yury Selivanovf8cb8a12016-09-08 20:50:03 -0700436 "target",
437 "annotation",
438 "value",
439 "simple",
440};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300441static const char * const For_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200442 "target",
443 "iter",
444 "body",
445 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800446 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000447};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300448static const char * const AsyncFor_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400449 "target",
450 "iter",
451 "body",
452 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800453 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400454};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300455static const char * const While_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200456 "test",
457 "body",
458 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000459};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300460static const char * const If_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200461 "test",
462 "body",
463 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000464};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300465static const char * const With_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200466 "items",
467 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800468 "type_comment",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000469};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300470static const char * const AsyncWith_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400471 "items",
472 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800473 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400474};
Brandt Bucher145bf262021-02-26 14:51:55 -0800475static const char * const Match_fields[]={
476 "subject",
477 "cases",
478};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300479static const char * const Raise_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200480 "exc",
481 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000482};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300483static const char * const Try_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200484 "body",
485 "handlers",
486 "orelse",
487 "finalbody",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000488};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300489static const char * const Assert_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200490 "test",
491 "msg",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000492};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300493static const char * const Import_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200494 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000495};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300496static const char * const ImportFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200497 "module",
498 "names",
499 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000500};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300501static const char * const Global_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200502 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000503};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300504static const char * const Nonlocal_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200505 "names",
Jeremy Hylton81e95022007-02-27 06:50:52 +0000506};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300507static const char * const Expr_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200508 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000509};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300510static const char * const expr_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200511 "lineno",
512 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000513 "end_lineno",
514 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000515};
Victor Stinner5cf47822020-11-02 22:03:28 +0100516static PyObject* ast2obj_expr(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300517static const char * const BoolOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200518 "op",
519 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000520};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300521static const char * const NamedExpr_fields[]={
Emily Morehouse8f59ee02019-01-24 16:49:56 -0700522 "target",
523 "value",
524};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300525static const char * const BinOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200526 "left",
527 "op",
528 "right",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000529};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300530static const char * const UnaryOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200531 "op",
532 "operand",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000533};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300534static const char * const Lambda_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200535 "args",
536 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000537};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300538static const char * const IfExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200539 "test",
540 "body",
541 "orelse",
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000542};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300543static const char * const Dict_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200544 "keys",
545 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000546};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300547static const char * const Set_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200548 "elts",
Guido van Rossum86e58e22006-08-28 15:27:34 +0000549};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300550static const char * const ListComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200551 "elt",
552 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000553};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300554static const char * const SetComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200555 "elt",
556 "generators",
Nick Coghlan650f0d02007-04-15 12:05:43 +0000557};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300558static const char * const DictComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200559 "key",
560 "value",
561 "generators",
Guido van Rossum992d4a32007-07-11 13:09:30 +0000562};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300563static const char * const GeneratorExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200564 "elt",
565 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000566};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300567static const char * const Await_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400568 "value",
569};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300570static const char * const Yield_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200571 "value",
Benjamin Peterson527c6222012-01-14 08:58:23 -0500572};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300573static const char * const YieldFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200574 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000575};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300576static const char * const Compare_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200577 "left",
578 "ops",
579 "comparators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000580};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300581static const char * const Call_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200582 "func",
583 "args",
584 "keywords",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000585};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300586static const char * const FormattedValue_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400587 "value",
588 "conversion",
589 "format_spec",
590};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300591static const char * const JoinedStr_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400592 "values",
593};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300594static const char * const Constant_fields[]={
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100595 "value",
Guido van Rossum10f8ce62019-03-13 13:00:46 -0700596 "kind",
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100597};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300598static const char * const Attribute_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200599 "value",
600 "attr",
601 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000602};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300603static const char * const Subscript_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200604 "value",
605 "slice",
606 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000607};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300608static const char * const Starred_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200609 "value",
610 "ctx",
Guido van Rossum0368b722007-05-11 16:50:42 +0000611};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300612static const char * const Name_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200613 "id",
614 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000615};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300616static const char * const List_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200617 "elts",
618 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000619};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300620static const char * const Tuple_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200621 "elts",
622 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000623};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300624static const char * const Slice_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200625 "lower",
626 "upper",
627 "step",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000628};
Victor Stinner5cf47822020-11-02 22:03:28 +0100629static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty);
630static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty);
631static PyObject* ast2obj_operator(struct ast_state *state, operator_ty);
632static PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty);
633static PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty);
634static PyObject* ast2obj_comprehension(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300635static const char * const comprehension_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200636 "target",
637 "iter",
638 "ifs",
Yury Selivanov52c4e7c2016-09-09 10:36:01 -0700639 "is_async",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000640};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300641static const char * const excepthandler_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200642 "lineno",
643 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000644 "end_lineno",
645 "end_col_offset",
Neal Norwitzad74aa82008-03-31 05:14:30 +0000646};
Victor Stinner5cf47822020-11-02 22:03:28 +0100647static PyObject* ast2obj_excepthandler(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300648static const char * const ExceptHandler_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200649 "type",
650 "name",
651 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000652};
Victor Stinner5cf47822020-11-02 22:03:28 +0100653static PyObject* ast2obj_arguments(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300654static const char * const arguments_fields[]={
Pablo Galindo8c77b8c2019-04-29 13:36:57 +0100655 "posonlyargs",
Pablo Galindocd6e83b2019-07-15 01:32:18 +0200656 "args",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200657 "vararg",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200658 "kwonlyargs",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200659 "kw_defaults",
Victor Stinneree4b59c2013-07-27 00:01:35 +0200660 "kwarg",
661 "defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000662};
Victor Stinner5cf47822020-11-02 22:03:28 +0100663static PyObject* ast2obj_arg(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300664static const char * const arg_attributes[] = {
Victor Stinneree4b59c2013-07-27 00:01:35 +0200665 "lineno",
666 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000667 "end_lineno",
668 "end_col_offset",
Benjamin Petersoncda75be2013-03-18 10:48:58 -0700669};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300670static const char * const arg_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200671 "arg",
672 "annotation",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800673 "type_comment",
Neal Norwitzc1505362006-12-28 06:47:50 +0000674};
Victor Stinner5cf47822020-11-02 22:03:28 +0100675static PyObject* ast2obj_keyword(struct ast_state *state, void*);
Pablo Galindo168660b2020-04-02 00:47:39 +0100676static const char * const keyword_attributes[] = {
677 "lineno",
678 "col_offset",
679 "end_lineno",
680 "end_col_offset",
681};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300682static const char * const keyword_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200683 "arg",
684 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000685};
Victor Stinner5cf47822020-11-02 22:03:28 +0100686static PyObject* ast2obj_alias(struct ast_state *state, void*);
Matthew Suozzo75a06f02021-04-10 16:56:28 -0400687static const char * const alias_attributes[] = {
688 "lineno",
689 "col_offset",
690 "end_lineno",
691 "end_col_offset",
692};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300693static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200694 "name",
695 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000696};
Victor Stinner5cf47822020-11-02 22:03:28 +0100697static PyObject* ast2obj_withitem(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300698static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200699 "context_expr",
700 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500701};
Brandt Bucher145bf262021-02-26 14:51:55 -0800702static PyObject* ast2obj_match_case(struct ast_state *state, void*);
703static const char * const match_case_fields[]={
704 "pattern",
705 "guard",
706 "body",
707};
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000708static const char * const pattern_attributes[] = {
709 "lineno",
710 "col_offset",
711 "end_lineno",
712 "end_col_offset",
713};
714static PyObject* ast2obj_pattern(struct ast_state *state, void*);
715static const char * const MatchValue_fields[]={
716 "value",
717};
718static const char * const MatchSingleton_fields[]={
719 "value",
720};
721static const char * const MatchSequence_fields[]={
722 "patterns",
723};
724static const char * const MatchMapping_fields[]={
725 "keys",
726 "patterns",
727 "rest",
728};
729static const char * const MatchClass_fields[]={
730 "cls",
731 "patterns",
732 "kwd_attrs",
733 "kwd_patterns",
734};
735static const char * const MatchStar_fields[]={
736 "name",
737};
738static const char * const MatchAs_fields[]={
739 "pattern",
740 "name",
741};
742static const char * const MatchOr_fields[]={
743 "patterns",
744};
Victor Stinner5cf47822020-11-02 22:03:28 +0100745static PyObject* ast2obj_type_ignore(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300746static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800747 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700748 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800749};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000750
751
INADA Naokifc489082017-01-25 22:33:43 +0900752
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700753typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100754 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700755 PyObject *dict;
756} AST_object;
757
Benjamin Peterson1767e022012-03-14 21:50:29 -0500758static void
759ast_dealloc(AST_object *self)
760{
INADA Naokia6296d32017-08-24 14:55:17 +0900761 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400762 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900763 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500764 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400765 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
766 assert(free_func != NULL);
767 free_func(self);
768 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500769}
770
Neal Norwitz207c9f32008-03-31 04:42:11 +0000771static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700772ast_traverse(AST_object *self, visitproc visit, void *arg)
773{
Pablo Galindo1cf15af2020-05-27 10:03:38 +0100774 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700775 Py_VISIT(self->dict);
776 return 0;
777}
778
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300779static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700780ast_clear(AST_object *self)
781{
782 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300783 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700784}
785
786static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000787ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
788{
Victor Stinner5cf47822020-11-02 22:03:28 +0100789 struct ast_state *state = get_ast_state();
Victor Stinner1f764532020-07-04 23:18:15 +0200790 if (state == NULL) {
791 return -1;
792 }
793
Neal Norwitz207c9f32008-03-31 04:42:11 +0000794 Py_ssize_t i, numfields = 0;
795 int res = -1;
796 PyObject *key, *value, *fields;
Victor Stinner74419f02020-07-03 11:35:37 +0200797 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200798 goto cleanup;
799 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000800 if (fields) {
801 numfields = PySequence_Size(fields);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200802 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000803 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200804 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000805 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900806
Neal Norwitz207c9f32008-03-31 04:42:11 +0000807 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900808 if (numfields < PyTuple_GET_SIZE(args)) {
809 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
810 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700811 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900812 numfields, numfields == 1 ? "" : "s");
813 res = -1;
814 goto cleanup;
815 }
816 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
817 /* cannot be reached when fields is NULL */
818 PyObject *name = PySequence_GetItem(fields, i);
819 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000820 res = -1;
821 goto cleanup;
822 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900823 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
824 Py_DECREF(name);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200825 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900826 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200827 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000828 }
829 if (kw) {
830 i = 0; /* needed by PyDict_Next */
831 while (PyDict_Next(kw, &i, &key, &value)) {
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200832 int contains = PySequence_Contains(fields, key);
833 if (contains == -1) {
834 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000835 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200836 } else if (contains == 1) {
837 Py_ssize_t p = PySequence_Index(fields, key);
838 if (p == -1) {
839 res = -1;
840 goto cleanup;
841 }
842 if (p < PyTuple_GET_SIZE(args)) {
843 PyErr_Format(PyExc_TypeError,
844 "%.400s got multiple values for argument '%U'",
845 Py_TYPE(self)->tp_name, key);
846 res = -1;
847 goto cleanup;
848 }
849 }
850 res = PyObject_SetAttr(self, key, value);
851 if (res < 0) {
852 goto cleanup;
853 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000854 }
855 }
856 cleanup:
857 Py_XDECREF(fields);
858 return res;
859}
860
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000861/* Pickling support */
862static PyObject *
863ast_type_reduce(PyObject *self, PyObject *unused)
864{
Victor Stinner5cf47822020-11-02 22:03:28 +0100865 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200866 if (state == NULL) {
867 return NULL;
868 }
869
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200870 PyObject *dict;
Victor Stinner74419f02020-07-03 11:35:37 +0200871 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200872 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000873 }
874 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200875 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000876 }
877 return Py_BuildValue("O()", Py_TYPE(self));
878}
879
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700880static PyMemberDef ast_type_members[] = {
881 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
882 {NULL} /* Sentinel */
883};
884
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000885static PyMethodDef ast_type_methods[] = {
886 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
887 {NULL}
888};
889
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700890static PyGetSetDef ast_type_getsets[] = {
891 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
892 {NULL}
893};
894
Dino Viehlandac46eb42019-09-11 10:16:34 -0700895static PyType_Slot AST_type_slots[] = {
896 {Py_tp_dealloc, ast_dealloc},
897 {Py_tp_getattro, PyObject_GenericGetAttr},
898 {Py_tp_setattro, PyObject_GenericSetAttr},
899 {Py_tp_traverse, ast_traverse},
900 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700901 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700902 {Py_tp_methods, ast_type_methods},
903 {Py_tp_getset, ast_type_getsets},
904 {Py_tp_init, ast_type_init},
905 {Py_tp_alloc, PyType_GenericAlloc},
906 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700907 {Py_tp_free, PyObject_GC_Del},
908 {0, 0},
909};
910
911static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200912 "ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700913 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000914 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -0700915 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
916 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +0000917};
918
Dino Viehlandac46eb42019-09-11 10:16:34 -0700919static PyObject *
Victor Stinner5cf47822020-11-02 22:03:28 +0100920make_type(struct ast_state *state, const char *type, PyObject* base,
Victor Stinner74419f02020-07-03 11:35:37 +0200921 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000922{
923 PyObject *fnames, *result;
924 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000925 fnames = PyTuple_New(num_fields);
926 if (!fnames) return NULL;
927 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300928 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000929 if (!field) {
930 Py_DECREF(fnames);
931 return NULL;
932 }
933 PyTuple_SET_ITEM(fnames, i, field);
934 }
Brandt Bucher145bf262021-02-26 14:51:55 -0800935 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +0900936 type, base,
Victor Stinner74419f02020-07-03 11:35:37 +0200937 state->_fields, fnames,
Brandt Bucher145bf262021-02-26 14:51:55 -0800938 state->__match_args__, fnames,
Victor Stinner74419f02020-07-03 11:35:37 +0200939 state->__module__,
940 state->ast,
941 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000942 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700943 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000944}
945
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300946static int
Victor Stinner5cf47822020-11-02 22:03:28 +0100947add_attributes(struct ast_state *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000948{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000949 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000950 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000951 if (!l)
952 return 0;
953 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300954 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000955 if (!s) {
956 Py_DECREF(l);
957 return 0;
958 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000959 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000960 }
Victor Stinner74419f02020-07-03 11:35:37 +0200961 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000962 Py_DECREF(l);
963 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000964}
965
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000966/* Conversion AST -> Python */
967
Victor Stinner5cf47822020-11-02 22:03:28 +0100968static 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 +0000969{
Benjamin Peterson77fa9372012-05-15 10:10:27 -0700970 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000971 PyObject *result = PyList_New(n);
972 PyObject *value;
973 if (!result)
974 return NULL;
975 for (i = 0; i < n; i++) {
Pablo Galindoa5634c42020-09-16 19:42:00 +0100976 value = func(state, asdl_seq_GET_UNTYPED(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000977 if (!value) {
978 Py_DECREF(result);
979 return NULL;
980 }
981 PyList_SET_ITEM(result, i, value);
982 }
983 return result;
984}
985
Victor Stinner5cf47822020-11-02 22:03:28 +0100986static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000987{
988 if (!o)
989 o = Py_None;
990 Py_INCREF((PyObject*)o);
991 return (PyObject*)o;
992}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100993#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000994#define ast2obj_identifier ast2obj_object
995#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000996
Victor Stinner5cf47822020-11-02 22:03:28 +0100997static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000998{
Christian Heimes217cfd12007-12-02 14:31:20 +0000999 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001000}
1001
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001002/* Conversion Python -> AST */
1003
Victor Stinner5cf47822020-11-02 22:03:28 +01001004static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001005{
1006 if (obj == Py_None)
1007 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +02001008 if (obj) {
Victor Stinner8370e072021-03-24 02:23:01 +01001009 if (_PyArena_AddPyObject(arena, obj) < 0) {
Christian Heimes70c94e72013-07-27 00:33:13 +02001010 *out = NULL;
1011 return -1;
1012 }
1013 Py_INCREF(obj);
1014 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001015 *out = obj;
1016 return 0;
1017}
1018
Victor Stinner5cf47822020-11-02 22:03:28 +01001019static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001020{
Victor Stinner8370e072021-03-24 02:23:01 +01001021 if (_PyArena_AddPyObject(arena, obj) < 0) {
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001022 *out = NULL;
1023 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001024 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001025 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001026 *out = obj;
1027 return 0;
1028}
1029
Victor Stinner5cf47822020-11-02 22:03:28 +01001030static int obj2ast_identifier(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001031{
Benjamin Peterson180e6352011-07-22 11:09:07 -05001032 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
1033 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001034 return 1;
1035 }
Victor Stinner74419f02020-07-03 11:35:37 +02001036 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001037}
1038
Victor Stinner5cf47822020-11-02 22:03:28 +01001039static int obj2ast_string(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001040{
1041 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
1042 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
1043 return 1;
1044 }
Victor Stinner74419f02020-07-03 11:35:37 +02001045 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001046}
1047
Victor Stinner5cf47822020-11-02 22:03:28 +01001048static int obj2ast_int(struct ast_state* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001049{
1050 int i;
1051 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001052 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001053 return 1;
1054 }
1055
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001056 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001057 if (i == -1 && PyErr_Occurred())
1058 return 1;
1059 *out = i;
1060 return 0;
1061}
1062
Victor Stinner5cf47822020-11-02 22:03:28 +01001063static int add_ast_fields(struct ast_state *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001064{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001065 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001066 empty_tuple = PyTuple_New(0);
1067 if (!empty_tuple ||
Victor Stinner74419f02020-07-03 11:35:37 +02001068 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
Brandt Bucher145bf262021-02-26 14:51:55 -08001069 PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
Victor Stinner74419f02020-07-03 11:35:37 +02001070 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001071 Py_XDECREF(empty_tuple);
1072 return -1;
1073 }
1074 Py_DECREF(empty_tuple);
1075 return 0;
1076}
1077
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001078
Victor Stinnerfd957c12020-11-03 18:07:15 +01001079
1080static int
1081init_types(struct ast_state *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001082{
Victor Stinnerfd957c12020-11-03 18:07:15 +01001083 // init_types() must not be called after _PyAST_Fini()
1084 // has been called
1085 assert(state->initialized >= 0);
1086
1087 if (state->initialized) {
1088 return 1;
1089 }
1090 if (init_identifiers(state) < 0) {
1091 return 0;
1092 }
Dino Viehlandac46eb42019-09-11 10:16:34 -07001093 state->AST_type = PyType_FromSpec(&AST_type_spec);
Victor Stinnerfd957c12020-11-03 18:07:15 +01001094 if (!state->AST_type) {
1095 return 0;
1096 }
1097 if (add_ast_fields(state) < 0) {
1098 return 0;
1099 }
Victor Stinner74419f02020-07-03 11:35:37 +02001100 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001101 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1102 " | Interactive(stmt* body)\n"
1103 " | Expression(expr body)\n"
1104 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001105 if (!state->mod_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001106 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1107 state->Module_type = make_type(state, "Module", state->mod_type,
1108 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001109 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001110 if (!state->Module_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001111 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001112 Interactive_fields, 1,
1113 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001114 if (!state->Interactive_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001115 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001116 Expression_fields, 1,
1117 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001118 if (!state->Expression_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001119 state->FunctionType_type = make_type(state, "FunctionType",
1120 state->mod_type, FunctionType_fields,
1121 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001122 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001123 if (!state->FunctionType_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001124 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001125 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1126 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1127 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1128 " | Return(expr? value)\n"
1129 " | Delete(expr* targets)\n"
1130 " | Assign(expr* targets, expr value, string? type_comment)\n"
1131 " | AugAssign(expr target, operator op, expr value)\n"
1132 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1133 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1134 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1135 " | While(expr test, stmt* body, stmt* orelse)\n"
1136 " | If(expr test, stmt* body, stmt* orelse)\n"
1137 " | With(withitem* items, stmt* body, string? type_comment)\n"
1138 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001139 " | Match(expr subject, match_case* cases)\n"
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001140 " | Raise(expr? exc, expr? cause)\n"
1141 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1142 " | Assert(expr test, expr? msg)\n"
1143 " | Import(alias* names)\n"
1144 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1145 " | Global(identifier* names)\n"
1146 " | Nonlocal(identifier* names)\n"
1147 " | Expr(expr value)\n"
1148 " | Pass\n"
1149 " | Break\n"
1150 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001151 if (!state->stmt_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001152 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001153 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
1154 return 0;
1155 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1156 -1)
1157 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001158 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001159 FunctionDef_fields, 6,
1160 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001161 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001162 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1163 -1)
1164 return 0;
1165 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1166 == -1)
1167 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001168 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001169 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001170 AsyncFunctionDef_fields, 6,
1171 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001172 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001173 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1174 == -1)
1175 return 0;
1176 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1177 Py_None) == -1)
1178 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001179 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001180 ClassDef_fields, 5,
1181 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001182 if (!state->ClassDef_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001183 state->Return_type = make_type(state, "Return", state->stmt_type,
1184 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001185 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001186 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001187 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1188 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001189 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1190 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001191 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001192 if (!state->Delete_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001193 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1194 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001195 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001196 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001197 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1198 -1)
1199 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001200 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001201 AugAssign_fields, 3,
1202 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001203 if (!state->AugAssign_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001204 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001205 AnnAssign_fields, 4,
1206 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001207 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001208 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1209 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001210 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001211 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001212 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001213 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1214 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001215 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001216 AsyncFor_fields, 5,
1217 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001218 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001219 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1220 -1)
1221 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001222 state->While_type = make_type(state, "While", state->stmt_type,
1223 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001224 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001225 if (!state->While_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001226 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001227 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001228 if (!state->If_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001229 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1230 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001231 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001232 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001233 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1234 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001235 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001236 AsyncWith_fields, 3,
1237 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001238 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001239 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1240 == -1)
1241 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001242 state->Match_type = make_type(state, "Match", state->stmt_type,
1243 Match_fields, 2,
1244 "Match(expr subject, match_case* cases)");
1245 if (!state->Match_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001246 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1247 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001248 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001249 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001250 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1251 return 0;
1252 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1253 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001254 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001255 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001256 if (!state->Try_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001257 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1258 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001259 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001260 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001261 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1262 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001263 state->Import_type = make_type(state, "Import", state->stmt_type,
1264 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001265 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001266 if (!state->Import_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001267 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001268 ImportFrom_fields, 3,
1269 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001270 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001271 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1272 return 0;
1273 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1274 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001275 state->Global_type = make_type(state, "Global", state->stmt_type,
1276 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001277 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001278 if (!state->Global_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001279 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001280 Nonlocal_fields, 1,
1281 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001282 if (!state->Nonlocal_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001283 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1284 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001285 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001286 if (!state->Expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001287 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001288 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001289 if (!state->Pass_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001290 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001291 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001292 if (!state->Break_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001293 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1294 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001295 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001296 if (!state->Continue_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001297 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001298 "expr = BoolOp(boolop op, expr* values)\n"
1299 " | NamedExpr(expr target, expr value)\n"
1300 " | BinOp(expr left, operator op, expr right)\n"
1301 " | UnaryOp(unaryop op, expr operand)\n"
1302 " | Lambda(arguments args, expr body)\n"
1303 " | IfExp(expr test, expr body, expr orelse)\n"
1304 " | Dict(expr* keys, expr* values)\n"
1305 " | Set(expr* elts)\n"
1306 " | ListComp(expr elt, comprehension* generators)\n"
1307 " | SetComp(expr elt, comprehension* generators)\n"
1308 " | DictComp(expr key, expr value, comprehension* generators)\n"
1309 " | GeneratorExp(expr elt, comprehension* generators)\n"
1310 " | Await(expr value)\n"
1311 " | Yield(expr? value)\n"
1312 " | YieldFrom(expr value)\n"
1313 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1314 " | Call(expr func, expr* args, keyword* keywords)\n"
1315 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1316 " | JoinedStr(expr* values)\n"
1317 " | Constant(constant value, string? kind)\n"
1318 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1319 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1320 " | Starred(expr value, expr_context ctx)\n"
1321 " | Name(identifier id, expr_context ctx)\n"
1322 " | List(expr* elts, expr_context ctx)\n"
1323 " | Tuple(expr* elts, expr_context ctx)\n"
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001324 " | Slice(expr? lower, expr? upper, expr? step)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001325 if (!state->expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001326 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001327 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1328 return 0;
1329 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1330 -1)
1331 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001332 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1333 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001334 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001335 if (!state->BoolOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001336 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001337 NamedExpr_fields, 2,
1338 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001339 if (!state->NamedExpr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001340 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1341 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001342 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001343 if (!state->BinOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001344 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001345 UnaryOp_fields, 2,
1346 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001347 if (!state->UnaryOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001348 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1349 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001350 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001351 if (!state->Lambda_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001352 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1353 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001354 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001355 if (!state->IfExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001356 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1357 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001358 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001359 if (!state->Dict_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001360 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001361 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001362 if (!state->Set_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001363 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001364 ListComp_fields, 2,
1365 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001366 if (!state->ListComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001367 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001368 SetComp_fields, 2,
1369 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001370 if (!state->SetComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001371 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001372 DictComp_fields, 3,
1373 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001374 if (!state->DictComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001375 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1376 state->expr_type, GeneratorExp_fields,
1377 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001378 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001379 if (!state->GeneratorExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001380 state->Await_type = make_type(state, "Await", state->expr_type,
1381 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001382 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001383 if (!state->Await_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001384 state->Yield_type = make_type(state, "Yield", state->expr_type,
1385 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001386 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001387 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001388 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1389 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001390 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001391 YieldFrom_fields, 1,
1392 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001393 if (!state->YieldFrom_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001394 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001395 Compare_fields, 3,
1396 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001397 if (!state->Compare_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001398 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1399 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001400 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001401 if (!state->Call_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001402 state->FormattedValue_type = make_type(state, "FormattedValue",
1403 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001404 FormattedValue_fields, 3,
1405 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001406 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001407 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1408 Py_None) == -1)
1409 return 0;
1410 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1411 Py_None) == -1)
1412 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001413 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001414 JoinedStr_fields, 1,
1415 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001416 if (!state->JoinedStr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001417 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001418 Constant_fields, 2,
1419 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001420 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001421 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1422 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001423 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001424 Attribute_fields, 3,
1425 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001426 if (!state->Attribute_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001427 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001428 Subscript_fields, 3,
1429 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001430 if (!state->Subscript_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001431 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001432 Starred_fields, 2,
1433 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001434 if (!state->Starred_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001435 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1436 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001437 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001438 if (!state->Name_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001439 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1440 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001441 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001442 if (!state->List_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001443 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1444 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001445 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001446 if (!state->Tuple_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001447 state->Slice_type = make_type(state, "Slice", state->expr_type,
1448 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001449 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001450 if (!state->Slice_type) return 0;
1451 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1452 return 0;
1453 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1454 return 0;
1455 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1456 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001457 state->expr_context_type = make_type(state, "expr_context",
1458 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001459 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001460 if (!state->expr_context_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001461 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1462 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1463 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001464 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001465 if (!state->Load_type) return 0;
1466 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1467 NULL, NULL);
1468 if (!state->Load_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001469 state->Store_type = make_type(state, "Store", state->expr_context_type,
1470 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001471 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001472 if (!state->Store_type) return 0;
1473 state->Store_singleton = PyType_GenericNew((PyTypeObject
1474 *)state->Store_type, NULL, NULL);
1475 if (!state->Store_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001476 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001477 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001478 if (!state->Del_type) return 0;
1479 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1480 NULL, NULL);
1481 if (!state->Del_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001482 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001483 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001484 if (!state->boolop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001485 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1486 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001487 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001488 if (!state->And_type) return 0;
1489 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1490 NULL, NULL);
1491 if (!state->And_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001492 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001493 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001494 if (!state->Or_type) return 0;
1495 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1496 NULL, NULL);
1497 if (!state->Or_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001498 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1499 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001500 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001501 if (!state->operator_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001502 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1503 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001504 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001505 if (!state->Add_type) return 0;
1506 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1507 NULL, NULL);
1508 if (!state->Add_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001509 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001510 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001511 if (!state->Sub_type) return 0;
1512 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1513 NULL, NULL);
1514 if (!state->Sub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001515 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001516 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001517 if (!state->Mult_type) return 0;
1518 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1519 NULL, NULL);
1520 if (!state->Mult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001521 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1522 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001523 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001524 if (!state->MatMult_type) return 0;
1525 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1526 *)state->MatMult_type, NULL,
1527 NULL);
1528 if (!state->MatMult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001529 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001530 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001531 if (!state->Div_type) return 0;
1532 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1533 NULL, NULL);
1534 if (!state->Div_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001535 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001536 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001537 if (!state->Mod_type) return 0;
1538 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1539 NULL, NULL);
1540 if (!state->Mod_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001541 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001542 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001543 if (!state->Pow_type) return 0;
1544 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1545 NULL, NULL);
1546 if (!state->Pow_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001547 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1548 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001549 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001550 if (!state->LShift_type) return 0;
1551 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1552 *)state->LShift_type, NULL,
1553 NULL);
1554 if (!state->LShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001555 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1556 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001557 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001558 if (!state->RShift_type) return 0;
1559 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1560 *)state->RShift_type, NULL,
1561 NULL);
1562 if (!state->RShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001563 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001564 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001565 if (!state->BitOr_type) return 0;
1566 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1567 *)state->BitOr_type, NULL, NULL);
1568 if (!state->BitOr_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001569 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1570 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001571 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001572 if (!state->BitXor_type) return 0;
1573 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1574 *)state->BitXor_type, NULL,
1575 NULL);
1576 if (!state->BitXor_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001577 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1578 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001579 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001580 if (!state->BitAnd_type) return 0;
1581 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1582 *)state->BitAnd_type, NULL,
1583 NULL);
1584 if (!state->BitAnd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001585 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1586 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001587 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001588 if (!state->FloorDiv_type) return 0;
1589 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1590 *)state->FloorDiv_type, NULL,
1591 NULL);
1592 if (!state->FloorDiv_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001593 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001594 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001595 if (!state->unaryop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001596 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1597 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1598 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001599 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001600 if (!state->Invert_type) return 0;
1601 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1602 *)state->Invert_type, NULL,
1603 NULL);
1604 if (!state->Invert_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001605 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001606 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001607 if (!state->Not_type) return 0;
1608 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1609 NULL, NULL);
1610 if (!state->Not_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001611 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001612 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001613 if (!state->UAdd_type) return 0;
1614 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1615 NULL, NULL);
1616 if (!state->UAdd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001617 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001618 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001619 if (!state->USub_type) return 0;
1620 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1621 NULL, NULL);
1622 if (!state->USub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001623 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001624 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001625 if (!state->cmpop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001626 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1627 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001628 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001629 if (!state->Eq_type) return 0;
1630 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1631 NULL, NULL);
1632 if (!state->Eq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001633 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001634 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001635 if (!state->NotEq_type) return 0;
1636 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1637 *)state->NotEq_type, NULL, NULL);
1638 if (!state->NotEq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001639 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001640 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001641 if (!state->Lt_type) return 0;
1642 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1643 NULL, NULL);
1644 if (!state->Lt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001645 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001646 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001647 if (!state->LtE_type) return 0;
1648 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1649 NULL, NULL);
1650 if (!state->LtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001651 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001652 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001653 if (!state->Gt_type) return 0;
1654 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1655 NULL, NULL);
1656 if (!state->Gt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001657 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001658 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001659 if (!state->GtE_type) return 0;
1660 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1661 NULL, NULL);
1662 if (!state->GtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001663 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001664 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001665 if (!state->Is_type) return 0;
1666 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1667 NULL, NULL);
1668 if (!state->Is_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001669 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001670 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001671 if (!state->IsNot_type) return 0;
1672 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1673 *)state->IsNot_type, NULL, NULL);
1674 if (!state->IsNot_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001675 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001676 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001677 if (!state->In_type) return 0;
1678 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1679 NULL, NULL);
1680 if (!state->In_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001681 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001682 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001683 if (!state->NotIn_type) return 0;
1684 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1685 *)state->NotIn_type, NULL, NULL);
1686 if (!state->NotIn_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001687 state->comprehension_type = make_type(state, "comprehension",
1688 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001689 comprehension_fields, 4,
1690 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001691 if (!state->comprehension_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001692 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1693 state->excepthandler_type = make_type(state, "excepthandler",
1694 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001695 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001696 if (!state->excepthandler_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001697 if (!add_attributes(state, state->excepthandler_type,
1698 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001699 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1700 == -1)
1701 return 0;
1702 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1703 Py_None) == -1)
1704 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001705 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001706 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001707 ExceptHandler_fields, 3,
1708 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001709 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001710 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1711 return 0;
1712 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1713 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001714 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001715 arguments_fields, 7,
1716 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001717 if (!state->arguments_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001718 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001719 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1720 return 0;
1721 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1722 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001723 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001724 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001725 if (!state->arg_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001726 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001727 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1728 return 0;
1729 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1730 return 0;
1731 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1732 return 0;
1733 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1734 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001735 state->keyword_type = make_type(state, "keyword", state->AST_type,
1736 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001737 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001738 if (!state->keyword_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001739 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1740 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001741 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1742 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001743 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1744 return 0;
1745 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1746 == -1)
1747 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001748 state->alias_type = make_type(state, "alias", state->AST_type,
1749 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001750 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001751 if (!state->alias_type) return 0;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04001752 if (!add_attributes(state, state->alias_type, alias_attributes, 4)) return
1753 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001754 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1755 return 0;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04001756 if (PyObject_SetAttr(state->alias_type, state->end_lineno, Py_None) == -1)
1757 return 0;
1758 if (PyObject_SetAttr(state->alias_type, state->end_col_offset, Py_None) ==
1759 -1)
1760 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001761 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001762 withitem_fields, 2,
1763 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001764 if (!state->withitem_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001765 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001766 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1767 == -1)
1768 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001769 state->match_case_type = make_type(state, "match_case", state->AST_type,
1770 match_case_fields, 3,
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001771 "match_case(pattern pattern, expr? guard, stmt* body)");
Brandt Bucher145bf262021-02-26 14:51:55 -08001772 if (!state->match_case_type) return 0;
1773 if (!add_attributes(state, state->match_case_type, NULL, 0)) return 0;
1774 if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1)
1775 return 0;
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001776 state->pattern_type = make_type(state, "pattern", state->AST_type, NULL, 0,
1777 "pattern = MatchValue(expr value)\n"
1778 " | MatchSingleton(constant value)\n"
1779 " | MatchSequence(pattern* patterns)\n"
1780 " | MatchMapping(expr* keys, pattern* patterns, identifier? rest)\n"
1781 " | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)\n"
1782 " | MatchStar(identifier? name)\n"
1783 " | MatchAs(pattern? pattern, identifier? name)\n"
1784 " | MatchOr(pattern* patterns)");
1785 if (!state->pattern_type) return 0;
1786 if (!add_attributes(state, state->pattern_type, pattern_attributes, 4))
1787 return 0;
1788 state->MatchValue_type = make_type(state, "MatchValue",
1789 state->pattern_type, MatchValue_fields,
1790 1,
1791 "MatchValue(expr value)");
1792 if (!state->MatchValue_type) return 0;
1793 state->MatchSingleton_type = make_type(state, "MatchSingleton",
1794 state->pattern_type,
1795 MatchSingleton_fields, 1,
1796 "MatchSingleton(constant value)");
1797 if (!state->MatchSingleton_type) return 0;
1798 state->MatchSequence_type = make_type(state, "MatchSequence",
1799 state->pattern_type,
1800 MatchSequence_fields, 1,
1801 "MatchSequence(pattern* patterns)");
1802 if (!state->MatchSequence_type) return 0;
1803 state->MatchMapping_type = make_type(state, "MatchMapping",
1804 state->pattern_type,
1805 MatchMapping_fields, 3,
1806 "MatchMapping(expr* keys, pattern* patterns, identifier? rest)");
1807 if (!state->MatchMapping_type) return 0;
1808 if (PyObject_SetAttr(state->MatchMapping_type, state->rest, Py_None) == -1)
1809 return 0;
1810 state->MatchClass_type = make_type(state, "MatchClass",
1811 state->pattern_type, MatchClass_fields,
1812 4,
1813 "MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)");
1814 if (!state->MatchClass_type) return 0;
1815 state->MatchStar_type = make_type(state, "MatchStar", state->pattern_type,
1816 MatchStar_fields, 1,
1817 "MatchStar(identifier? name)");
1818 if (!state->MatchStar_type) return 0;
1819 if (PyObject_SetAttr(state->MatchStar_type, state->name, Py_None) == -1)
1820 return 0;
1821 state->MatchAs_type = make_type(state, "MatchAs", state->pattern_type,
1822 MatchAs_fields, 2,
1823 "MatchAs(pattern? pattern, identifier? name)");
1824 if (!state->MatchAs_type) return 0;
1825 if (PyObject_SetAttr(state->MatchAs_type, state->pattern, Py_None) == -1)
1826 return 0;
1827 if (PyObject_SetAttr(state->MatchAs_type, state->name, Py_None) == -1)
1828 return 0;
1829 state->MatchOr_type = make_type(state, "MatchOr", state->pattern_type,
1830 MatchOr_fields, 1,
1831 "MatchOr(pattern* patterns)");
1832 if (!state->MatchOr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001833 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1834 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001835 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001836 if (!state->type_ignore_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001837 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1838 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1839 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001840 TypeIgnore_fields, 2,
1841 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001842 if (!state->TypeIgnore_type) return 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +01001843
Dino Viehlandac46eb42019-09-11 10:16:34 -07001844 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001845 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001846}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001847
Victor Stinner5cf47822020-11-02 22:03:28 +01001848static int obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001849 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001850static int obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001851 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001852static int obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001853 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001854static int obj2ast_expr_context(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001855 expr_context_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001856static int obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty*
1857 out, PyArena* arena);
1858static int obj2ast_operator(struct ast_state *state, PyObject* obj,
1859 operator_ty* out, PyArena* arena);
1860static int obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001861 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001862static int obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001863 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001864static int obj2ast_comprehension(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001865 comprehension_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001866static int obj2ast_excepthandler(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001867 excepthandler_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001868static int obj2ast_arguments(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001869 arguments_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001870static int obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001871 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001872static int obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001873 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001874static int obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001875 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001876static int obj2ast_withitem(struct ast_state *state, PyObject* obj,
1877 withitem_ty* out, PyArena* arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08001878static int obj2ast_match_case(struct ast_state *state, PyObject* obj,
1879 match_case_ty* out, PyArena* arena);
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001880static int obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty*
1881 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001882static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001883 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001884
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001885mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001886_PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores,
1887 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001888{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001889 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001890 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001891 if (!p)
1892 return NULL;
1893 p->kind = Module_kind;
1894 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001895 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001896 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001897}
1898
1899mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001900_PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001901{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001902 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001903 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001904 if (!p)
1905 return NULL;
1906 p->kind = Interactive_kind;
1907 p->v.Interactive.body = body;
1908 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001909}
1910
1911mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001912_PyAST_Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001913{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001914 mod_ty p;
1915 if (!body) {
1916 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001917 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001918 return NULL;
1919 }
Victor Stinner8370e072021-03-24 02:23:01 +01001920 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001921 if (!p)
1922 return NULL;
1923 p->kind = Expression_kind;
1924 p->v.Expression.body = body;
1925 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001926}
1927
1928mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001929_PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001930{
1931 mod_ty p;
1932 if (!returns) {
1933 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001934 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001935 return NULL;
1936 }
Victor Stinner8370e072021-03-24 02:23:01 +01001937 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001938 if (!p)
1939 return NULL;
1940 p->kind = FunctionType_kind;
1941 p->v.FunctionType.argtypes = argtypes;
1942 p->v.FunctionType.returns = returns;
1943 return p;
1944}
1945
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001946stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001947_PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1948 asdl_expr_seq * decorator_list, expr_ty returns, string
1949 type_comment, int lineno, int col_offset, int end_lineno,
1950 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001951{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001952 stmt_ty p;
1953 if (!name) {
1954 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001955 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001956 return NULL;
1957 }
1958 if (!args) {
1959 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001960 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001961 return NULL;
1962 }
Victor Stinner8370e072021-03-24 02:23:01 +01001963 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001964 if (!p)
1965 return NULL;
1966 p->kind = FunctionDef_kind;
1967 p->v.FunctionDef.name = name;
1968 p->v.FunctionDef.args = args;
1969 p->v.FunctionDef.body = body;
1970 p->v.FunctionDef.decorator_list = decorator_list;
1971 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001972 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001973 p->lineno = lineno;
1974 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001975 p->end_lineno = end_lineno;
1976 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001977 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001978}
1979
1980stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001981_PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
1982 body, asdl_expr_seq * decorator_list, expr_ty returns,
1983 string type_comment, int lineno, int col_offset, int
1984 end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04001985{
1986 stmt_ty p;
1987 if (!name) {
1988 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001989 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001990 return NULL;
1991 }
1992 if (!args) {
1993 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001994 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001995 return NULL;
1996 }
Victor Stinner8370e072021-03-24 02:23:01 +01001997 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04001998 if (!p)
1999 return NULL;
2000 p->kind = AsyncFunctionDef_kind;
2001 p->v.AsyncFunctionDef.name = name;
2002 p->v.AsyncFunctionDef.args = args;
2003 p->v.AsyncFunctionDef.body = body;
2004 p->v.AsyncFunctionDef.decorator_list = decorator_list;
2005 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002006 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002007 p->lineno = lineno;
2008 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002009 p->end_lineno = end_lineno;
2010 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002011 return p;
2012}
2013
2014stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002015_PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq *
2016 keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list,
2017 int lineno, int col_offset, int end_lineno, int end_col_offset,
2018 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002019{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002020 stmt_ty p;
2021 if (!name) {
2022 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002023 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002024 return NULL;
2025 }
Victor Stinner8370e072021-03-24 02:23:01 +01002026 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002027 if (!p)
2028 return NULL;
2029 p->kind = ClassDef_kind;
2030 p->v.ClassDef.name = name;
2031 p->v.ClassDef.bases = bases;
2032 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002033 p->v.ClassDef.body = body;
2034 p->v.ClassDef.decorator_list = decorator_list;
2035 p->lineno = lineno;
2036 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002037 p->end_lineno = end_lineno;
2038 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002039 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002040}
2041
2042stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002043_PyAST_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
2044 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002045{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002046 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002047 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002048 if (!p)
2049 return NULL;
2050 p->kind = Return_kind;
2051 p->v.Return.value = value;
2052 p->lineno = lineno;
2053 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002054 p->end_lineno = end_lineno;
2055 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002056 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002057}
2058
2059stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002060_PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int
2061 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002062{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002063 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002064 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002065 if (!p)
2066 return NULL;
2067 p->kind = Delete_kind;
2068 p->v.Delete.targets = targets;
2069 p->lineno = lineno;
2070 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002071 p->end_lineno = end_lineno;
2072 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002073 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002074}
2075
2076stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002077_PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int
2078 lineno, int col_offset, int end_lineno, int end_col_offset,
2079 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002080{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002081 stmt_ty p;
2082 if (!value) {
2083 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002084 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002085 return NULL;
2086 }
Victor Stinner8370e072021-03-24 02:23:01 +01002087 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002088 if (!p)
2089 return NULL;
2090 p->kind = Assign_kind;
2091 p->v.Assign.targets = targets;
2092 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002093 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002094 p->lineno = lineno;
2095 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002096 p->end_lineno = end_lineno;
2097 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002098 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002099}
2100
2101stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002102_PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
2103 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002104{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002105 stmt_ty p;
2106 if (!target) {
2107 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002108 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002109 return NULL;
2110 }
2111 if (!op) {
2112 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002113 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002114 return NULL;
2115 }
2116 if (!value) {
2117 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002118 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002119 return NULL;
2120 }
Victor Stinner8370e072021-03-24 02:23:01 +01002121 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002122 if (!p)
2123 return NULL;
2124 p->kind = AugAssign_kind;
2125 p->v.AugAssign.target = target;
2126 p->v.AugAssign.op = op;
2127 p->v.AugAssign.value = value;
2128 p->lineno = lineno;
2129 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002130 p->end_lineno = end_lineno;
2131 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002132 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002133}
2134
2135stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002136_PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple,
2137 int lineno, int col_offset, int end_lineno, int
2138 end_col_offset, PyArena *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002139{
2140 stmt_ty p;
2141 if (!target) {
2142 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002143 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002144 return NULL;
2145 }
2146 if (!annotation) {
2147 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002148 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002149 return NULL;
2150 }
Victor Stinner8370e072021-03-24 02:23:01 +01002151 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002152 if (!p)
2153 return NULL;
2154 p->kind = AnnAssign_kind;
2155 p->v.AnnAssign.target = target;
2156 p->v.AnnAssign.annotation = annotation;
2157 p->v.AnnAssign.value = value;
2158 p->v.AnnAssign.simple = simple;
2159 p->lineno = lineno;
2160 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002161 p->end_lineno = end_lineno;
2162 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002163 return p;
2164}
2165
2166stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002167_PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq *
2168 orelse, string type_comment, int lineno, int col_offset, int
2169 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002170{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002171 stmt_ty p;
2172 if (!target) {
2173 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002174 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002175 return NULL;
2176 }
2177 if (!iter) {
2178 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002179 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002180 return NULL;
2181 }
Victor Stinner8370e072021-03-24 02:23:01 +01002182 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002183 if (!p)
2184 return NULL;
2185 p->kind = For_kind;
2186 p->v.For.target = target;
2187 p->v.For.iter = iter;
2188 p->v.For.body = body;
2189 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002190 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002191 p->lineno = lineno;
2192 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002193 p->end_lineno = end_lineno;
2194 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002195 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002196}
2197
2198stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002199_PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body,
2200 asdl_stmt_seq * orelse, string type_comment, int lineno, int
2201 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002202{
2203 stmt_ty p;
2204 if (!target) {
2205 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002206 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002207 return NULL;
2208 }
2209 if (!iter) {
2210 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002211 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002212 return NULL;
2213 }
Victor Stinner8370e072021-03-24 02:23:01 +01002214 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002215 if (!p)
2216 return NULL;
2217 p->kind = AsyncFor_kind;
2218 p->v.AsyncFor.target = target;
2219 p->v.AsyncFor.iter = iter;
2220 p->v.AsyncFor.body = body;
2221 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002222 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002223 p->lineno = lineno;
2224 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002225 p->end_lineno = end_lineno;
2226 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002227 return p;
2228}
2229
2230stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002231_PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2232 lineno, int col_offset, int end_lineno, int end_col_offset,
2233 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002234{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002235 stmt_ty p;
2236 if (!test) {
2237 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002238 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002239 return NULL;
2240 }
Victor Stinner8370e072021-03-24 02:23:01 +01002241 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002242 if (!p)
2243 return NULL;
2244 p->kind = While_kind;
2245 p->v.While.test = test;
2246 p->v.While.body = body;
2247 p->v.While.orelse = orelse;
2248 p->lineno = lineno;
2249 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002250 p->end_lineno = end_lineno;
2251 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002252 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002253}
2254
2255stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002256_PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2257 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2258 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002259{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002260 stmt_ty p;
2261 if (!test) {
2262 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002263 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002264 return NULL;
2265 }
Victor Stinner8370e072021-03-24 02:23:01 +01002266 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002267 if (!p)
2268 return NULL;
2269 p->kind = If_kind;
2270 p->v.If.test = test;
2271 p->v.If.body = body;
2272 p->v.If.orelse = orelse;
2273 p->lineno = lineno;
2274 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002275 p->end_lineno = end_lineno;
2276 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002277 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002278}
2279
2280stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002281_PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2282 type_comment, int lineno, int col_offset, int end_lineno, int
2283 end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002284{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002285 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002286 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002287 if (!p)
2288 return NULL;
2289 p->kind = With_kind;
2290 p->v.With.items = items;
2291 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002292 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002293 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;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002298}
2299
2300stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002301_PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2302 type_comment, int lineno, int col_offset, int end_lineno, int
2303 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002304{
2305 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002306 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002307 if (!p)
2308 return NULL;
2309 p->kind = AsyncWith_kind;
2310 p->v.AsyncWith.items = items;
2311 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002312 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002313 p->lineno = lineno;
2314 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002315 p->end_lineno = end_lineno;
2316 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002317 return p;
2318}
2319
2320stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002321_PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int
2322 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08002323{
2324 stmt_ty p;
2325 if (!subject) {
2326 PyErr_SetString(PyExc_ValueError,
2327 "field 'subject' is required for Match");
2328 return NULL;
2329 }
Victor Stinner8370e072021-03-24 02:23:01 +01002330 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08002331 if (!p)
2332 return NULL;
2333 p->kind = Match_kind;
2334 p->v.Match.subject = subject;
2335 p->v.Match.cases = cases;
2336 p->lineno = lineno;
2337 p->col_offset = col_offset;
2338 p->end_lineno = end_lineno;
2339 p->end_col_offset = end_col_offset;
2340 return p;
2341}
2342
2343stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002344_PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int
2345 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002346{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002347 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002348 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002349 if (!p)
2350 return NULL;
2351 p->kind = Raise_kind;
2352 p->v.Raise.exc = exc;
2353 p->v.Raise.cause = cause;
2354 p->lineno = lineno;
2355 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002356 p->end_lineno = end_lineno;
2357 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002358 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002359}
2360
2361stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002362_PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers,
2363 asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int lineno, int
2364 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002365{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002366 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002367 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002368 if (!p)
2369 return NULL;
2370 p->kind = Try_kind;
2371 p->v.Try.body = body;
2372 p->v.Try.handlers = handlers;
2373 p->v.Try.orelse = orelse;
2374 p->v.Try.finalbody = finalbody;
2375 p->lineno = lineno;
2376 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002377 p->end_lineno = end_lineno;
2378 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002379 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002380}
2381
2382stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002383_PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int
2384 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002385{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002386 stmt_ty p;
2387 if (!test) {
2388 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002389 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002390 return NULL;
2391 }
Victor Stinner8370e072021-03-24 02:23:01 +01002392 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002393 if (!p)
2394 return NULL;
2395 p->kind = Assert_kind;
2396 p->v.Assert.test = test;
2397 p->v.Assert.msg = msg;
2398 p->lineno = lineno;
2399 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002400 p->end_lineno = end_lineno;
2401 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002402 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002403}
2404
2405stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002406_PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int
2407 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002408{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002409 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002410 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002411 if (!p)
2412 return NULL;
2413 p->kind = Import_kind;
2414 p->v.Import.names = names;
2415 p->lineno = lineno;
2416 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002417 p->end_lineno = end_lineno;
2418 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002419 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002420}
2421
2422stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002423_PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, int
2424 lineno, int col_offset, int end_lineno, int end_col_offset,
2425 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002426{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002427 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002428 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002429 if (!p)
2430 return NULL;
2431 p->kind = ImportFrom_kind;
2432 p->v.ImportFrom.module = module;
2433 p->v.ImportFrom.names = names;
2434 p->v.ImportFrom.level = level;
2435 p->lineno = lineno;
2436 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002437 p->end_lineno = end_lineno;
2438 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002439 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002440}
2441
2442stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002443_PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, int
2444 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002445{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002446 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002447 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002448 if (!p)
2449 return NULL;
2450 p->kind = Global_kind;
2451 p->v.Global.names = names;
2452 p->lineno = lineno;
2453 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002454 p->end_lineno = end_lineno;
2455 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002456 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002457}
2458
2459stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002460_PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int
2461 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002462{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002463 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002464 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002465 if (!p)
2466 return NULL;
2467 p->kind = Nonlocal_kind;
2468 p->v.Nonlocal.names = names;
2469 p->lineno = lineno;
2470 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002471 p->end_lineno = end_lineno;
2472 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002473 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002474}
2475
2476stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002477_PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2478 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002479{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002480 stmt_ty p;
2481 if (!value) {
2482 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002483 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002484 return NULL;
2485 }
Victor Stinner8370e072021-03-24 02:23:01 +01002486 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002487 if (!p)
2488 return NULL;
2489 p->kind = Expr_kind;
2490 p->v.Expr.value = value;
2491 p->lineno = lineno;
2492 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002493 p->end_lineno = end_lineno;
2494 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002495 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002496}
2497
2498stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002499_PyAST_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset,
2500 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002501{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002502 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002503 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002504 if (!p)
2505 return NULL;
2506 p->kind = Pass_kind;
2507 p->lineno = lineno;
2508 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002509 p->end_lineno = end_lineno;
2510 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002511 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002512}
2513
2514stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002515_PyAST_Break(int lineno, int col_offset, int end_lineno, int end_col_offset,
2516 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002517{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002518 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002519 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002520 if (!p)
2521 return NULL;
2522 p->kind = Break_kind;
2523 p->lineno = lineno;
2524 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002525 p->end_lineno = end_lineno;
2526 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002527 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002528}
2529
2530stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002531_PyAST_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2532 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002533{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002534 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002535 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002536 if (!p)
2537 return NULL;
2538 p->kind = Continue_kind;
2539 p->lineno = lineno;
2540 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002541 p->end_lineno = end_lineno;
2542 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002543 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002544}
2545
2546expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002547_PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset,
2548 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002549{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002550 expr_ty p;
2551 if (!op) {
2552 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002553 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002554 return NULL;
2555 }
Victor Stinner8370e072021-03-24 02:23:01 +01002556 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002557 if (!p)
2558 return NULL;
2559 p->kind = BoolOp_kind;
2560 p->v.BoolOp.op = op;
2561 p->v.BoolOp.values = values;
2562 p->lineno = lineno;
2563 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002564 p->end_lineno = end_lineno;
2565 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002566 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002567}
2568
2569expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002570_PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2571 end_lineno, int end_col_offset, PyArena *arena)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002572{
2573 expr_ty p;
2574 if (!target) {
2575 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002576 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002577 return NULL;
2578 }
2579 if (!value) {
2580 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002581 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002582 return NULL;
2583 }
Victor Stinner8370e072021-03-24 02:23:01 +01002584 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002585 if (!p)
2586 return NULL;
2587 p->kind = NamedExpr_kind;
2588 p->v.NamedExpr.target = target;
2589 p->v.NamedExpr.value = value;
2590 p->lineno = lineno;
2591 p->col_offset = col_offset;
2592 p->end_lineno = end_lineno;
2593 p->end_col_offset = end_col_offset;
2594 return p;
2595}
2596
2597expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002598_PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
2599 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002600{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002601 expr_ty p;
2602 if (!left) {
2603 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002604 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002605 return NULL;
2606 }
2607 if (!op) {
2608 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002609 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002610 return NULL;
2611 }
2612 if (!right) {
2613 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002614 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002615 return NULL;
2616 }
Victor Stinner8370e072021-03-24 02:23:01 +01002617 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002618 if (!p)
2619 return NULL;
2620 p->kind = BinOp_kind;
2621 p->v.BinOp.left = left;
2622 p->v.BinOp.op = op;
2623 p->v.BinOp.right = right;
2624 p->lineno = lineno;
2625 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002626 p->end_lineno = end_lineno;
2627 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002628 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002629}
2630
2631expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002632_PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2633 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002634{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002635 expr_ty p;
2636 if (!op) {
2637 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002638 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002639 return NULL;
2640 }
2641 if (!operand) {
2642 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002643 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002644 return NULL;
2645 }
Victor Stinner8370e072021-03-24 02:23:01 +01002646 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002647 if (!p)
2648 return NULL;
2649 p->kind = UnaryOp_kind;
2650 p->v.UnaryOp.op = op;
2651 p->v.UnaryOp.operand = operand;
2652 p->lineno = lineno;
2653 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002654 p->end_lineno = end_lineno;
2655 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002656 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002657}
2658
2659expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002660_PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2661 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002662{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002663 expr_ty p;
2664 if (!args) {
2665 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002666 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002667 return NULL;
2668 }
2669 if (!body) {
2670 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002671 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002672 return NULL;
2673 }
Victor Stinner8370e072021-03-24 02:23:01 +01002674 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002675 if (!p)
2676 return NULL;
2677 p->kind = Lambda_kind;
2678 p->v.Lambda.args = args;
2679 p->v.Lambda.body = body;
2680 p->lineno = lineno;
2681 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002682 p->end_lineno = end_lineno;
2683 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002684 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002685}
2686
2687expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002688_PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
2689 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002690{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002691 expr_ty p;
2692 if (!test) {
2693 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002694 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002695 return NULL;
2696 }
2697 if (!body) {
2698 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002699 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002700 return NULL;
2701 }
2702 if (!orelse) {
2703 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002704 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002705 return NULL;
2706 }
Victor Stinner8370e072021-03-24 02:23:01 +01002707 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002708 if (!p)
2709 return NULL;
2710 p->kind = IfExp_kind;
2711 p->v.IfExp.test = test;
2712 p->v.IfExp.body = body;
2713 p->v.IfExp.orelse = orelse;
2714 p->lineno = lineno;
2715 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002716 p->end_lineno = end_lineno;
2717 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002718 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002719}
2720
2721expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002722_PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int
2723 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002724{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002725 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002726 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002727 if (!p)
2728 return NULL;
2729 p->kind = Dict_kind;
2730 p->v.Dict.keys = keys;
2731 p->v.Dict.values = values;
2732 p->lineno = lineno;
2733 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002734 p->end_lineno = end_lineno;
2735 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002736 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002737}
2738
2739expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002740_PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno,
2741 int end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002742{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002743 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002744 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002745 if (!p)
2746 return NULL;
2747 p->kind = Set_kind;
2748 p->v.Set.elts = elts;
2749 p->lineno = lineno;
2750 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002751 p->end_lineno = end_lineno;
2752 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002753 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002754}
2755
2756expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002757_PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2758 int col_offset, int end_lineno, int end_col_offset, PyArena
2759 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002760{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002761 expr_ty p;
2762 if (!elt) {
2763 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002764 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002765 return NULL;
2766 }
Victor Stinner8370e072021-03-24 02:23:01 +01002767 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002768 if (!p)
2769 return NULL;
2770 p->kind = ListComp_kind;
2771 p->v.ListComp.elt = elt;
2772 p->v.ListComp.generators = generators;
2773 p->lineno = lineno;
2774 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002775 p->end_lineno = end_lineno;
2776 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002777 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002778}
2779
2780expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002781_PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2782 int col_offset, int end_lineno, int end_col_offset, PyArena
2783 *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002784{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002785 expr_ty p;
2786 if (!elt) {
2787 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002788 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002789 return NULL;
2790 }
Victor Stinner8370e072021-03-24 02:23:01 +01002791 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002792 if (!p)
2793 return NULL;
2794 p->kind = SetComp_kind;
2795 p->v.SetComp.elt = elt;
2796 p->v.SetComp.generators = generators;
2797 p->lineno = lineno;
2798 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002799 p->end_lineno = end_lineno;
2800 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002801 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002802}
2803
2804expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002805_PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq *
2806 generators, int lineno, int col_offset, int end_lineno, int
2807 end_col_offset, PyArena *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002808{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002809 expr_ty p;
2810 if (!key) {
2811 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002812 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002813 return NULL;
2814 }
2815 if (!value) {
2816 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002817 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002818 return NULL;
2819 }
Victor Stinner8370e072021-03-24 02:23:01 +01002820 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002821 if (!p)
2822 return NULL;
2823 p->kind = DictComp_kind;
2824 p->v.DictComp.key = key;
2825 p->v.DictComp.value = value;
2826 p->v.DictComp.generators = generators;
2827 p->lineno = lineno;
2828 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002829 p->end_lineno = end_lineno;
2830 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002831 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002832}
2833
2834expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002835_PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int
2836 lineno, int col_offset, int end_lineno, int end_col_offset,
2837 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002838{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002839 expr_ty p;
2840 if (!elt) {
2841 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002842 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002843 return NULL;
2844 }
Victor Stinner8370e072021-03-24 02:23:01 +01002845 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002846 if (!p)
2847 return NULL;
2848 p->kind = GeneratorExp_kind;
2849 p->v.GeneratorExp.elt = elt;
2850 p->v.GeneratorExp.generators = generators;
2851 p->lineno = lineno;
2852 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002853 p->end_lineno = end_lineno;
2854 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002855 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002856}
2857
2858expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002859_PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2860 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002861{
2862 expr_ty p;
2863 if (!value) {
2864 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002865 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002866 return NULL;
2867 }
Victor Stinner8370e072021-03-24 02:23:01 +01002868 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002869 if (!p)
2870 return NULL;
2871 p->kind = Await_kind;
2872 p->v.Await.value = value;
2873 p->lineno = lineno;
2874 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002875 p->end_lineno = end_lineno;
2876 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002877 return p;
2878}
2879
2880expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002881_PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2882 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002883{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002884 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002885 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002886 if (!p)
2887 return NULL;
2888 p->kind = Yield_kind;
2889 p->v.Yield.value = value;
2890 p->lineno = lineno;
2891 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002892 p->end_lineno = end_lineno;
2893 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002894 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002895}
2896
2897expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002898_PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2899 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002900{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002901 expr_ty p;
2902 if (!value) {
2903 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002904 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002905 return NULL;
2906 }
Victor Stinner8370e072021-03-24 02:23:01 +01002907 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002908 if (!p)
2909 return NULL;
2910 p->kind = YieldFrom_kind;
2911 p->v.YieldFrom.value = value;
2912 p->lineno = lineno;
2913 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002914 p->end_lineno = end_lineno;
2915 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002916 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002917}
2918
2919expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002920_PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators,
2921 int lineno, int col_offset, int end_lineno, int end_col_offset,
2922 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002923{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002924 expr_ty p;
2925 if (!left) {
2926 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002927 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002928 return NULL;
2929 }
Victor Stinner8370e072021-03-24 02:23:01 +01002930 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002931 if (!p)
2932 return NULL;
2933 p->kind = Compare_kind;
2934 p->v.Compare.left = left;
2935 p->v.Compare.ops = ops;
2936 p->v.Compare.comparators = comparators;
2937 p->lineno = lineno;
2938 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002939 p->end_lineno = end_lineno;
2940 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002941 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002942}
2943
2944expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002945_PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords,
2946 int lineno, int col_offset, int end_lineno, int end_col_offset,
2947 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002948{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002949 expr_ty p;
2950 if (!func) {
2951 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002952 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002953 return NULL;
2954 }
Victor Stinner8370e072021-03-24 02:23:01 +01002955 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002956 if (!p)
2957 return NULL;
2958 p->kind = Call_kind;
2959 p->v.Call.func = func;
2960 p->v.Call.args = args;
2961 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002962 p->lineno = lineno;
2963 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002964 p->end_lineno = end_lineno;
2965 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002966 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002967}
2968
2969expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002970_PyAST_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int
2971 lineno, int col_offset, int end_lineno, int
2972 end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002973{
2974 expr_ty p;
2975 if (!value) {
2976 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002977 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002978 return NULL;
2979 }
Victor Stinner8370e072021-03-24 02:23:01 +01002980 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04002981 if (!p)
2982 return NULL;
2983 p->kind = FormattedValue_kind;
2984 p->v.FormattedValue.value = value;
2985 p->v.FormattedValue.conversion = conversion;
2986 p->v.FormattedValue.format_spec = format_spec;
2987 p->lineno = lineno;
2988 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002989 p->end_lineno = end_lineno;
2990 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002991 return p;
2992}
2993
2994expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002995_PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int
2996 end_lineno, int end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002997{
2998 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002999 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04003000 if (!p)
3001 return NULL;
3002 p->kind = JoinedStr_kind;
3003 p->v.JoinedStr.values = values;
3004 p->lineno = lineno;
3005 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003006 p->end_lineno = end_lineno;
3007 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04003008 return p;
3009}
3010
3011expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003012_PyAST_Constant(constant value, string kind, int lineno, int col_offset, int
3013 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003014{
3015 expr_ty p;
3016 if (!value) {
3017 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003018 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003019 return NULL;
3020 }
Victor Stinner8370e072021-03-24 02:23:01 +01003021 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003022 if (!p)
3023 return NULL;
3024 p->kind = Constant_kind;
3025 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07003026 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003027 p->lineno = lineno;
3028 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003029 p->end_lineno = end_lineno;
3030 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003031 return p;
3032}
3033
3034expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003035_PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
3036 lineno, int col_offset, int end_lineno, int end_col_offset,
3037 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003038{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003039 expr_ty p;
3040 if (!value) {
3041 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003042 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003043 return NULL;
3044 }
3045 if (!attr) {
3046 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003047 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003048 return NULL;
3049 }
3050 if (!ctx) {
3051 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003052 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003053 return NULL;
3054 }
Victor Stinner8370e072021-03-24 02:23:01 +01003055 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003056 if (!p)
3057 return NULL;
3058 p->kind = Attribute_kind;
3059 p->v.Attribute.value = value;
3060 p->v.Attribute.attr = attr;
3061 p->v.Attribute.ctx = ctx;
3062 p->lineno = lineno;
3063 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003064 p->end_lineno = end_lineno;
3065 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003066 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003067}
3068
3069expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003070_PyAST_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno,
3071 int col_offset, int end_lineno, int end_col_offset, PyArena
3072 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003073{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003074 expr_ty p;
3075 if (!value) {
3076 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003077 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003078 return NULL;
3079 }
3080 if (!slice) {
3081 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003082 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003083 return NULL;
3084 }
3085 if (!ctx) {
3086 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003087 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003088 return NULL;
3089 }
Victor Stinner8370e072021-03-24 02:23:01 +01003090 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003091 if (!p)
3092 return NULL;
3093 p->kind = Subscript_kind;
3094 p->v.Subscript.value = value;
3095 p->v.Subscript.slice = slice;
3096 p->v.Subscript.ctx = ctx;
3097 p->lineno = lineno;
3098 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003099 p->end_lineno = end_lineno;
3100 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003101 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003102}
3103
3104expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003105_PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset,
3106 int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00003107{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003108 expr_ty p;
3109 if (!value) {
3110 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003111 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003112 return NULL;
3113 }
3114 if (!ctx) {
3115 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003116 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003117 return NULL;
3118 }
Victor Stinner8370e072021-03-24 02:23:01 +01003119 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003120 if (!p)
3121 return NULL;
3122 p->kind = Starred_kind;
3123 p->v.Starred.value = value;
3124 p->v.Starred.ctx = ctx;
3125 p->lineno = lineno;
3126 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003127 p->end_lineno = end_lineno;
3128 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003129 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003130}
3131
3132expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003133_PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3134 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003135{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003136 expr_ty p;
3137 if (!id) {
3138 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003139 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003140 return NULL;
3141 }
3142 if (!ctx) {
3143 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003144 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003145 return NULL;
3146 }
Victor Stinner8370e072021-03-24 02:23:01 +01003147 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003148 if (!p)
3149 return NULL;
3150 p->kind = Name_kind;
3151 p->v.Name.id = id;
3152 p->v.Name.ctx = ctx;
3153 p->lineno = lineno;
3154 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003155 p->end_lineno = end_lineno;
3156 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003157 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003158}
3159
3160expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003161_PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3162 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003163{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003164 expr_ty p;
3165 if (!ctx) {
3166 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003167 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003168 return NULL;
3169 }
Victor Stinner8370e072021-03-24 02:23:01 +01003170 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003171 if (!p)
3172 return NULL;
3173 p->kind = List_kind;
3174 p->v.List.elts = elts;
3175 p->v.List.ctx = ctx;
3176 p->lineno = lineno;
3177 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003178 p->end_lineno = end_lineno;
3179 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003180 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003181}
3182
3183expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003184_PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3185 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003186{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003187 expr_ty p;
3188 if (!ctx) {
3189 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003190 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003191 return NULL;
3192 }
Victor Stinner8370e072021-03-24 02:23:01 +01003193 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003194 if (!p)
3195 return NULL;
3196 p->kind = Tuple_kind;
3197 p->v.Tuple.elts = elts;
3198 p->v.Tuple.ctx = ctx;
3199 p->lineno = lineno;
3200 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003201 p->end_lineno = end_lineno;
3202 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003203 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003204}
3205
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003206expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003207_PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int
3208 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003209{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003210 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003211 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003212 if (!p)
3213 return NULL;
3214 p->kind = Slice_kind;
3215 p->v.Slice.lower = lower;
3216 p->v.Slice.upper = upper;
3217 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003218 p->lineno = lineno;
3219 p->col_offset = col_offset;
3220 p->end_lineno = end_lineno;
3221 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003222 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003223}
3224
3225comprehension_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003226_PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int
3227 is_async, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003228{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003229 comprehension_ty p;
3230 if (!target) {
3231 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003232 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003233 return NULL;
3234 }
3235 if (!iter) {
3236 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003237 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003238 return NULL;
3239 }
Victor Stinner8370e072021-03-24 02:23:01 +01003240 p = (comprehension_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003241 if (!p)
3242 return NULL;
3243 p->target = target;
3244 p->iter = iter;
3245 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003246 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003247 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003248}
3249
3250excepthandler_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003251_PyAST_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int
3252 lineno, int col_offset, int end_lineno, int
3253 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003254{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003255 excepthandler_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003256 p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003257 if (!p)
3258 return NULL;
3259 p->kind = ExceptHandler_kind;
3260 p->v.ExceptHandler.type = type;
3261 p->v.ExceptHandler.name = name;
3262 p->v.ExceptHandler.body = body;
3263 p->lineno = lineno;
3264 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003265 p->end_lineno = end_lineno;
3266 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003267 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003268}
3269
3270arguments_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003271_PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty
3272 vararg, asdl_arg_seq * kwonlyargs, asdl_expr_seq *
3273 kw_defaults, arg_ty kwarg, asdl_expr_seq * defaults, PyArena
3274 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003275{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003276 arguments_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003277 p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003278 if (!p)
3279 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003280 p->posonlyargs = posonlyargs;
Pablo Galindocd6e83b2019-07-15 01:32:18 +02003281 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003282 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003283 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003284 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003285 p->kwarg = kwarg;
3286 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003287 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003288}
3289
Neal Norwitzc1505362006-12-28 06:47:50 +00003290arg_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003291_PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int lineno,
3292 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003293{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003294 arg_ty p;
3295 if (!arg) {
3296 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003297 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003298 return NULL;
3299 }
Victor Stinner8370e072021-03-24 02:23:01 +01003300 p = (arg_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003301 if (!p)
3302 return NULL;
3303 p->arg = arg;
3304 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003305 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003306 p->lineno = lineno;
3307 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003308 p->end_lineno = end_lineno;
3309 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003310 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003311}
3312
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003313keyword_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003314_PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3315 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003316{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003317 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003318 if (!value) {
3319 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003320 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003321 return NULL;
3322 }
Victor Stinner8370e072021-03-24 02:23:01 +01003323 p = (keyword_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003324 if (!p)
3325 return NULL;
3326 p->arg = arg;
3327 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003328 p->lineno = lineno;
3329 p->col_offset = col_offset;
3330 p->end_lineno = end_lineno;
3331 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003332 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003333}
3334
3335alias_ty
Matthew Suozzo75a06f02021-04-10 16:56:28 -04003336_PyAST_alias(identifier name, identifier asname, int lineno, int col_offset,
3337 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003338{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003339 alias_ty p;
3340 if (!name) {
3341 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003342 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003343 return NULL;
3344 }
Victor Stinner8370e072021-03-24 02:23:01 +01003345 p = (alias_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003346 if (!p)
3347 return NULL;
3348 p->name = name;
3349 p->asname = asname;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04003350 p->lineno = lineno;
3351 p->col_offset = col_offset;
3352 p->end_lineno = end_lineno;
3353 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003354 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003355}
3356
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003357withitem_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003358_PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003359{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003360 withitem_ty p;
3361 if (!context_expr) {
3362 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003363 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003364 return NULL;
3365 }
Victor Stinner8370e072021-03-24 02:23:01 +01003366 p = (withitem_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003367 if (!p)
3368 return NULL;
3369 p->context_expr = context_expr;
3370 p->optional_vars = optional_vars;
3371 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003372}
3373
Brandt Bucher145bf262021-02-26 14:51:55 -08003374match_case_ty
Nick Coghlan1e7b8582021-04-29 15:58:44 +10003375_PyAST_match_case(pattern_ty pattern, expr_ty guard, asdl_stmt_seq * body,
3376 PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003377{
3378 match_case_ty p;
3379 if (!pattern) {
3380 PyErr_SetString(PyExc_ValueError,
3381 "field 'pattern' is required for match_case");
3382 return NULL;
3383 }
Victor Stinner8370e072021-03-24 02:23:01 +01003384 p = (match_case_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003385 if (!p)
3386 return NULL;
3387 p->pattern = pattern;
3388 p->guard = guard;
3389 p->body = body;
3390 return p;
3391}
3392
Nick Coghlan1e7b8582021-04-29 15:58:44 +10003393pattern_ty
3394_PyAST_MatchValue(expr_ty value, int lineno, int col_offset, int end_lineno,
3395 int end_col_offset, PyArena *arena)
3396{
3397 pattern_ty p;
3398 if (!value) {
3399 PyErr_SetString(PyExc_ValueError,
3400 "field 'value' is required for MatchValue");
3401 return NULL;
3402 }
3403 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3404 if (!p)
3405 return NULL;
3406 p->kind = MatchValue_kind;
3407 p->v.MatchValue.value = value;
3408 p->lineno = lineno;
3409 p->col_offset = col_offset;
3410 p->end_lineno = end_lineno;
3411 p->end_col_offset = end_col_offset;
3412 return p;
3413}
3414
3415pattern_ty
3416_PyAST_MatchSingleton(constant value, int lineno, int col_offset, int
3417 end_lineno, int end_col_offset, PyArena *arena)
3418{
3419 pattern_ty p;
3420 if (!value) {
3421 PyErr_SetString(PyExc_ValueError,
3422 "field 'value' is required for MatchSingleton");
3423 return NULL;
3424 }
3425 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3426 if (!p)
3427 return NULL;
3428 p->kind = MatchSingleton_kind;
3429 p->v.MatchSingleton.value = value;
3430 p->lineno = lineno;
3431 p->col_offset = col_offset;
3432 p->end_lineno = end_lineno;
3433 p->end_col_offset = end_col_offset;
3434 return p;
3435}
3436
3437pattern_ty
3438_PyAST_MatchSequence(asdl_pattern_seq * patterns, int lineno, int col_offset,
3439 int end_lineno, int end_col_offset, PyArena *arena)
3440{
3441 pattern_ty p;
3442 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3443 if (!p)
3444 return NULL;
3445 p->kind = MatchSequence_kind;
3446 p->v.MatchSequence.patterns = patterns;
3447 p->lineno = lineno;
3448 p->col_offset = col_offset;
3449 p->end_lineno = end_lineno;
3450 p->end_col_offset = end_col_offset;
3451 return p;
3452}
3453
3454pattern_ty
3455_PyAST_MatchMapping(asdl_expr_seq * keys, asdl_pattern_seq * patterns,
3456 identifier rest, int lineno, int col_offset, int
3457 end_lineno, int end_col_offset, PyArena *arena)
3458{
3459 pattern_ty p;
3460 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3461 if (!p)
3462 return NULL;
3463 p->kind = MatchMapping_kind;
3464 p->v.MatchMapping.keys = keys;
3465 p->v.MatchMapping.patterns = patterns;
3466 p->v.MatchMapping.rest = rest;
3467 p->lineno = lineno;
3468 p->col_offset = col_offset;
3469 p->end_lineno = end_lineno;
3470 p->end_col_offset = end_col_offset;
3471 return p;
3472}
3473
3474pattern_ty
3475_PyAST_MatchClass(expr_ty cls, asdl_pattern_seq * patterns, asdl_identifier_seq
3476 * kwd_attrs, asdl_pattern_seq * kwd_patterns, int lineno, int
3477 col_offset, int end_lineno, int end_col_offset, PyArena
3478 *arena)
3479{
3480 pattern_ty p;
3481 if (!cls) {
3482 PyErr_SetString(PyExc_ValueError,
3483 "field 'cls' is required for MatchClass");
3484 return NULL;
3485 }
3486 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3487 if (!p)
3488 return NULL;
3489 p->kind = MatchClass_kind;
3490 p->v.MatchClass.cls = cls;
3491 p->v.MatchClass.patterns = patterns;
3492 p->v.MatchClass.kwd_attrs = kwd_attrs;
3493 p->v.MatchClass.kwd_patterns = kwd_patterns;
3494 p->lineno = lineno;
3495 p->col_offset = col_offset;
3496 p->end_lineno = end_lineno;
3497 p->end_col_offset = end_col_offset;
3498 return p;
3499}
3500
3501pattern_ty
3502_PyAST_MatchStar(identifier name, int lineno, int col_offset, int end_lineno,
3503 int end_col_offset, PyArena *arena)
3504{
3505 pattern_ty p;
3506 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3507 if (!p)
3508 return NULL;
3509 p->kind = MatchStar_kind;
3510 p->v.MatchStar.name = name;
3511 p->lineno = lineno;
3512 p->col_offset = col_offset;
3513 p->end_lineno = end_lineno;
3514 p->end_col_offset = end_col_offset;
3515 return p;
3516}
3517
3518pattern_ty
3519_PyAST_MatchAs(pattern_ty pattern, identifier name, int lineno, int col_offset,
3520 int end_lineno, int end_col_offset, PyArena *arena)
3521{
3522 pattern_ty p;
3523 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3524 if (!p)
3525 return NULL;
3526 p->kind = MatchAs_kind;
3527 p->v.MatchAs.pattern = pattern;
3528 p->v.MatchAs.name = name;
3529 p->lineno = lineno;
3530 p->col_offset = col_offset;
3531 p->end_lineno = end_lineno;
3532 p->end_col_offset = end_col_offset;
3533 return p;
3534}
3535
3536pattern_ty
3537_PyAST_MatchOr(asdl_pattern_seq * patterns, int lineno, int col_offset, int
3538 end_lineno, int end_col_offset, PyArena *arena)
3539{
3540 pattern_ty p;
3541 p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
3542 if (!p)
3543 return NULL;
3544 p->kind = MatchOr_kind;
3545 p->v.MatchOr.patterns = patterns;
3546 p->lineno = lineno;
3547 p->col_offset = col_offset;
3548 p->end_lineno = end_lineno;
3549 p->end_col_offset = end_col_offset;
3550 return p;
3551}
3552
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003553type_ignore_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003554_PyAST_TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003555{
3556 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003557 if (!tag) {
3558 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003559 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003560 return NULL;
3561 }
Victor Stinner8370e072021-03-24 02:23:01 +01003562 p = (type_ignore_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003563 if (!p)
3564 return NULL;
3565 p->kind = TypeIgnore_kind;
3566 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003567 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003568 return p;
3569}
3570
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003571
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003572PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003573ast2obj_mod(struct ast_state *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003574{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003575 mod_ty o = (mod_ty)_o;
3576 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003577 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003578 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003579 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003580 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003581 switch (o->kind) {
3582 case Module_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003583 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003584 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003585 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003586 value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003587 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003588 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003589 goto failed;
3590 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003591 value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
Victor Stinner74419f02020-07-03 11:35:37 +02003592 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003593 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003594 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003595 goto failed;
3596 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003597 break;
3598 case Interactive_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003599 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003600 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003601 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003602 value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
3603 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003604 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003605 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003606 goto failed;
3607 Py_DECREF(value);
3608 break;
3609 case Expression_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003610 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003611 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003612 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003613 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003614 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003615 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003616 goto failed;
3617 Py_DECREF(value);
3618 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003619 case FunctionType_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003620 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003621 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003622 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003623 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
3624 ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003625 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003626 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003627 goto failed;
3628 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003629 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003630 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003631 if (PyObject_SetAttr(result, state->returns, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003632 goto failed;
3633 Py_DECREF(value);
3634 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003635 }
3636 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003637failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003638 Py_XDECREF(value);
3639 Py_XDECREF(result);
3640 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003641}
3642
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003643PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003644ast2obj_stmt(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003645{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003646 stmt_ty o = (stmt_ty)_o;
3647 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003648 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003649 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003650 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003651 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003652 switch (o->kind) {
3653 case FunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003654 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003655 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003656 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003657 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003658 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003659 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003660 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003661 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003662 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003663 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003664 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003665 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003666 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003667 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
3668 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003669 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003670 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003671 goto failed;
3672 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003673 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
Victor Stinner74419f02020-07-03 11:35:37 +02003674 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003675 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003676 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003677 goto failed;
3678 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003679 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003680 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003681 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003682 goto failed;
3683 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003684 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003685 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003686 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003687 goto failed;
3688 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003689 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003690 case AsyncFunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003691 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003692 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003693 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003694 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003695 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003696 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003697 goto failed;
3698 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003699 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003700 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003701 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003702 goto failed;
3703 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003704 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
3705 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003706 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003707 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003708 goto failed;
3709 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003710 value = ast2obj_list(state,
3711 (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003712 ast2obj_expr);
3713 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003714 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003715 goto failed;
3716 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003717 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003718 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003719 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003720 goto failed;
3721 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003722 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003723 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003724 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003725 goto failed;
3726 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003727 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003728 case ClassDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003729 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003730 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003731 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003732 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003733 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003734 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003735 goto failed;
3736 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003737 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
3738 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003739 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003740 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003741 goto failed;
3742 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003743 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
3744 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003745 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003746 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003747 goto failed;
3748 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003749 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
3750 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003751 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003752 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003753 goto failed;
3754 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003755 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
3756 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003757 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003758 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003759 goto failed;
3760 Py_DECREF(value);
3761 break;
3762 case Return_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003763 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003764 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003765 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003766 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003767 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003768 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003769 goto failed;
3770 Py_DECREF(value);
3771 break;
3772 case Delete_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003773 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003774 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003775 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003776 value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
3777 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003778 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003779 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003780 goto failed;
3781 Py_DECREF(value);
3782 break;
3783 case Assign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003784 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003785 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003786 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003787 value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
3788 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003789 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003790 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003791 goto failed;
3792 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003793 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003794 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003795 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003796 goto failed;
3797 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003798 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003799 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003800 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003801 goto failed;
3802 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003803 break;
3804 case AugAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003805 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003806 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003807 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003808 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003809 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003810 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003811 goto failed;
3812 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003813 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003814 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003815 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003816 goto failed;
3817 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003818 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003819 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003820 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003821 goto failed;
3822 Py_DECREF(value);
3823 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003824 case AnnAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003825 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003826 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003827 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003828 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003829 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003830 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003831 goto failed;
3832 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003833 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003834 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003835 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003836 goto failed;
3837 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003838 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003839 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003840 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003841 goto failed;
3842 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003843 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003844 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003845 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003846 goto failed;
3847 Py_DECREF(value);
3848 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003849 case For_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003850 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003851 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003852 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003853 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003854 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003855 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003856 goto failed;
3857 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003858 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003859 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003860 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003861 goto failed;
3862 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003863 value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003864 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003865 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003866 goto failed;
3867 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003868 value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003869 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003870 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003871 goto failed;
3872 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003873 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003874 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003875 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003876 goto failed;
3877 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003878 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003879 case AsyncFor_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003880 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003881 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003882 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003883 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003884 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003885 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003886 goto failed;
3887 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003888 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003889 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003890 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003891 goto failed;
3892 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003893 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
3894 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003895 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003896 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003897 goto failed;
3898 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003899 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
3900 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003901 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003902 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003903 goto failed;
3904 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003905 value = ast2obj_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003906 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003907 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003908 goto failed;
3909 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003910 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003911 case While_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003912 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003913 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003914 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003915 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003916 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003917 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003918 goto failed;
3919 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003920 value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003921 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003922 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003923 goto failed;
3924 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003925 value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003926 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003927 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003928 goto failed;
3929 Py_DECREF(value);
3930 break;
3931 case If_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003932 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003933 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003934 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003935 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003936 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003937 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003938 goto failed;
3939 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003940 value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003941 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003942 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003943 goto failed;
3944 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003945 value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003946 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003947 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003948 goto failed;
3949 Py_DECREF(value);
3950 break;
3951 case With_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003952 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003953 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003954 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003955 value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
3956 ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003957 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003958 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003959 goto failed;
3960 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003961 value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003962 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003963 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003964 goto failed;
3965 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003966 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003967 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003968 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003969 goto failed;
3970 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003971 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003972 case AsyncWith_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003973 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003974 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003975 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003976 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
3977 ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003978 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003979 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003980 goto failed;
3981 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003982 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
3983 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003984 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003985 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003986 goto failed;
3987 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003988 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003989 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003990 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003991 goto failed;
3992 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003993 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08003994 case Match_kind:
3995 tp = (PyTypeObject *)state->Match_type;
3996 result = PyType_GenericNew(tp, NULL, NULL);
3997 if (!result) goto failed;
3998 value = ast2obj_expr(state, o->v.Match.subject);
3999 if (!value) goto failed;
4000 if (PyObject_SetAttr(result, state->subject, value) == -1)
4001 goto failed;
4002 Py_DECREF(value);
4003 value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
4004 ast2obj_match_case);
4005 if (!value) goto failed;
4006 if (PyObject_SetAttr(result, state->cases, value) == -1)
4007 goto failed;
4008 Py_DECREF(value);
4009 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004010 case Raise_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004011 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004012 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004013 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004014 value = ast2obj_expr(state, o->v.Raise.exc);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004015 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004016 if (PyObject_SetAttr(result, state->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004017 goto failed;
4018 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004019 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004020 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004021 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004022 goto failed;
4023 Py_DECREF(value);
4024 break;
4025 case Try_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004026 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004027 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004028 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004029 value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004030 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004031 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004032 goto failed;
4033 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004034 value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
4035 ast2obj_excepthandler);
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->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004038 goto failed;
4039 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004040 value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
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->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004043 goto failed;
4044 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004045 value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
4046 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004047 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004048 if (PyObject_SetAttr(result, state->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004049 goto failed;
4050 Py_DECREF(value);
4051 break;
4052 case Assert_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004053 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004054 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004055 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004056 value = ast2obj_expr(state, o->v.Assert.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004057 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004058 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004059 goto failed;
4060 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004061 value = ast2obj_expr(state, o->v.Assert.msg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004062 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004063 if (PyObject_SetAttr(result, state->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004064 goto failed;
4065 Py_DECREF(value);
4066 break;
4067 case Import_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004068 tp = (PyTypeObject *)state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004069 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004070 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004071 value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
4072 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004073 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004074 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004075 goto failed;
4076 Py_DECREF(value);
4077 break;
4078 case ImportFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004079 tp = (PyTypeObject *)state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004080 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004081 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004082 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004083 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004084 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004085 goto failed;
4086 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004087 value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
4088 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004089 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004090 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004091 goto failed;
4092 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004093 value = ast2obj_int(state, o->v.ImportFrom.level);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004094 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004095 if (PyObject_SetAttr(result, state->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004096 goto failed;
4097 Py_DECREF(value);
4098 break;
4099 case Global_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004100 tp = (PyTypeObject *)state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004101 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004102 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004103 value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
4104 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004105 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004106 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004107 goto failed;
4108 Py_DECREF(value);
4109 break;
4110 case Nonlocal_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004111 tp = (PyTypeObject *)state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004112 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004113 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004114 value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
4115 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004116 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004117 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004118 goto failed;
4119 Py_DECREF(value);
4120 break;
4121 case Expr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004122 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004123 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004124 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004125 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004126 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004127 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004128 goto failed;
4129 Py_DECREF(value);
4130 break;
4131 case Pass_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004132 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004133 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004134 if (!result) goto failed;
4135 break;
4136 case Break_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004137 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004138 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004139 if (!result) goto failed;
4140 break;
4141 case Continue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004142 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004143 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004144 if (!result) goto failed;
4145 break;
4146 }
Victor Stinner74419f02020-07-03 11:35:37 +02004147 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004148 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004149 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004150 goto failed;
4151 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004152 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004153 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004154 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004155 goto failed;
4156 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004157 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004158 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004159 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004160 goto failed;
4161 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004162 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004163 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004164 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004165 goto failed;
4166 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004167 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004168failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004169 Py_XDECREF(value);
4170 Py_XDECREF(result);
4171 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004172}
4173
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004174PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004175ast2obj_expr(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004176{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004177 expr_ty o = (expr_ty)_o;
4178 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004179 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004180 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004181 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004182 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004183 switch (o->kind) {
4184 case BoolOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004185 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004186 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004187 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004188 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004189 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004190 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004191 goto failed;
4192 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004193 value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
4194 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004195 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004196 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004197 goto failed;
4198 Py_DECREF(value);
4199 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004200 case NamedExpr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004201 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004202 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004203 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004204 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004205 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004206 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004207 goto failed;
4208 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004209 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004210 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004211 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004212 goto failed;
4213 Py_DECREF(value);
4214 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004215 case BinOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004216 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004217 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004218 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004219 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004220 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004221 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004222 goto failed;
4223 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004224 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004225 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004226 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004227 goto failed;
4228 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004229 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004230 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004231 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004232 goto failed;
4233 Py_DECREF(value);
4234 break;
4235 case UnaryOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004236 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004237 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004238 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004239 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004240 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004241 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004242 goto failed;
4243 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004244 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004245 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004246 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004247 goto failed;
4248 Py_DECREF(value);
4249 break;
4250 case Lambda_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004251 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004252 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004253 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004254 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004255 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004256 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004257 goto failed;
4258 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004259 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004260 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004261 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004262 goto failed;
4263 Py_DECREF(value);
4264 break;
4265 case IfExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004266 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004267 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004268 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004269 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004270 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004271 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004272 goto failed;
4273 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004274 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004275 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004276 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004277 goto failed;
4278 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004279 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004280 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004281 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004282 goto failed;
4283 Py_DECREF(value);
4284 break;
4285 case Dict_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004286 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004287 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004288 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004289 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004290 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004291 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004292 goto failed;
4293 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004294 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004295 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004296 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004297 goto failed;
4298 Py_DECREF(value);
4299 break;
4300 case Set_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004301 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004302 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004303 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004304 value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004305 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004306 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004307 goto failed;
4308 Py_DECREF(value);
4309 break;
4310 case ListComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004311 tp = (PyTypeObject *)state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004312 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004313 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004314 value = ast2obj_expr(state, o->v.ListComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004315 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004316 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004317 goto failed;
4318 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004319 value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004320 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004321 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004322 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004323 goto failed;
4324 Py_DECREF(value);
4325 break;
4326 case SetComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004327 tp = (PyTypeObject *)state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004328 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004329 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004330 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004331 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004332 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004333 goto failed;
4334 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004335 value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004336 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004337 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004338 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004339 goto failed;
4340 Py_DECREF(value);
4341 break;
4342 case DictComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004343 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004344 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004345 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004346 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004347 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004348 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004349 goto failed;
4350 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004351 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004352 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004353 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004354 goto failed;
4355 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004356 value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004357 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004358 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004359 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004360 goto failed;
4361 Py_DECREF(value);
4362 break;
4363 case GeneratorExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004364 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004365 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004366 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004367 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004368 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004369 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004370 goto failed;
4371 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004372 value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004373 ast2obj_comprehension);
4374 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004375 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004376 goto failed;
4377 Py_DECREF(value);
4378 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004379 case Await_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004380 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004381 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004382 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004383 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004384 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004385 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004386 goto failed;
4387 Py_DECREF(value);
4388 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004389 case Yield_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004390 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004391 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004392 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004393 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004394 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004395 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004396 goto failed;
4397 Py_DECREF(value);
4398 break;
4399 case YieldFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004400 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004401 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004402 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004403 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004404 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004405 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004406 goto failed;
4407 Py_DECREF(value);
4408 break;
4409 case Compare_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004410 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004411 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004412 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004413 value = ast2obj_expr(state, o->v.Compare.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004414 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004415 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004416 goto failed;
4417 Py_DECREF(value);
4418 {
4419 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4420 value = PyList_New(n);
4421 if (!value) goto failed;
4422 for(i = 0; i < n; i++)
Victor Stinner74419f02020-07-03 11:35:37 +02004423 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 +00004424 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004425 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004426 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004427 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004428 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004429 value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
4430 ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004431 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004432 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004433 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004434 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004435 break;
4436 case Call_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004437 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004438 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004439 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004440 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004441 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004442 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004443 goto failed;
4444 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004445 value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004446 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004447 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004448 goto failed;
4449 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004450 value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
4451 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004452 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004453 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004454 goto failed;
4455 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004456 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004457 case FormattedValue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004458 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004459 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004460 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004461 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004462 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004463 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004464 goto failed;
4465 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004466 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004467 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004468 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004469 goto failed;
4470 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004471 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004472 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004473 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004474 goto failed;
4475 Py_DECREF(value);
4476 break;
4477 case JoinedStr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004478 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004479 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004480 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004481 value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
4482 ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004483 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004484 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004485 goto failed;
4486 Py_DECREF(value);
4487 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004488 case Constant_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004489 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004490 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004491 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004492 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004493 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004494 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004495 goto failed;
4496 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004497 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004498 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004499 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004500 goto failed;
4501 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004502 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004503 case Attribute_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004504 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004505 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004506 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004507 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004508 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004509 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004510 goto failed;
4511 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004512 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004513 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004514 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004515 goto failed;
4516 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004517 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004518 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004519 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004520 goto failed;
4521 Py_DECREF(value);
4522 break;
4523 case Subscript_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004524 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004525 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004526 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004527 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004528 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004529 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004530 goto failed;
4531 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004532 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004533 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004534 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004535 goto failed;
4536 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004537 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004538 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004539 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004540 goto failed;
4541 Py_DECREF(value);
4542 break;
4543 case Starred_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004544 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004545 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004546 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004547 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004548 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004549 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004550 goto failed;
4551 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004552 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004553 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004554 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004555 goto failed;
4556 Py_DECREF(value);
4557 break;
4558 case Name_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004559 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004560 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004561 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004562 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004563 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004564 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004565 goto failed;
4566 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004567 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004568 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004569 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004570 goto failed;
4571 Py_DECREF(value);
4572 break;
4573 case List_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004574 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004575 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004576 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004577 value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004578 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004579 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004580 goto failed;
4581 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004582 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004583 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004584 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004585 goto failed;
4586 Py_DECREF(value);
4587 break;
4588 case Tuple_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004589 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004590 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004591 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004592 value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004593 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004594 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004595 goto failed;
4596 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004597 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004598 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004599 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004600 goto failed;
4601 Py_DECREF(value);
4602 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004603 case Slice_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004604 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004605 result = PyType_GenericNew(tp, NULL, NULL);
4606 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004607 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004608 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004609 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004610 goto failed;
4611 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004612 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004613 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004614 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004615 goto failed;
4616 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004617 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004618 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004619 if (PyObject_SetAttr(result, state->step, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004620 goto failed;
4621 Py_DECREF(value);
4622 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004623 }
Victor Stinner74419f02020-07-03 11:35:37 +02004624 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004625 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004626 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004627 goto failed;
4628 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004629 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004630 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004631 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004632 goto failed;
4633 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004634 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004635 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004636 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004637 goto failed;
4638 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004639 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004640 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004641 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004642 goto failed;
4643 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004644 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004645failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004646 Py_XDECREF(value);
4647 Py_XDECREF(result);
4648 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004649}
4650
Victor Stinner5cf47822020-11-02 22:03:28 +01004651PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004652{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004653 switch(o) {
4654 case Load:
Victor Stinner74419f02020-07-03 11:35:37 +02004655 Py_INCREF(state->Load_singleton);
4656 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004657 case Store:
Victor Stinner74419f02020-07-03 11:35:37 +02004658 Py_INCREF(state->Store_singleton);
4659 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004660 case Del:
Victor Stinner74419f02020-07-03 11:35:37 +02004661 Py_INCREF(state->Del_singleton);
4662 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004663 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004664 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004665}
Victor Stinner5cf47822020-11-02 22:03:28 +01004666PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004667{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004668 switch(o) {
4669 case And:
Victor Stinner74419f02020-07-03 11:35:37 +02004670 Py_INCREF(state->And_singleton);
4671 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004672 case Or:
Victor Stinner74419f02020-07-03 11:35:37 +02004673 Py_INCREF(state->Or_singleton);
4674 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004675 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004676 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004677}
Victor Stinner5cf47822020-11-02 22:03:28 +01004678PyObject* ast2obj_operator(struct ast_state *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004679{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004680 switch(o) {
4681 case Add:
Victor Stinner74419f02020-07-03 11:35:37 +02004682 Py_INCREF(state->Add_singleton);
4683 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004684 case Sub:
Victor Stinner74419f02020-07-03 11:35:37 +02004685 Py_INCREF(state->Sub_singleton);
4686 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004687 case Mult:
Victor Stinner74419f02020-07-03 11:35:37 +02004688 Py_INCREF(state->Mult_singleton);
4689 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004690 case MatMult:
Victor Stinner74419f02020-07-03 11:35:37 +02004691 Py_INCREF(state->MatMult_singleton);
4692 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004693 case Div:
Victor Stinner74419f02020-07-03 11:35:37 +02004694 Py_INCREF(state->Div_singleton);
4695 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004696 case Mod:
Victor Stinner74419f02020-07-03 11:35:37 +02004697 Py_INCREF(state->Mod_singleton);
4698 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004699 case Pow:
Victor Stinner74419f02020-07-03 11:35:37 +02004700 Py_INCREF(state->Pow_singleton);
4701 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004702 case LShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004703 Py_INCREF(state->LShift_singleton);
4704 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004705 case RShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004706 Py_INCREF(state->RShift_singleton);
4707 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004708 case BitOr:
Victor Stinner74419f02020-07-03 11:35:37 +02004709 Py_INCREF(state->BitOr_singleton);
4710 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004711 case BitXor:
Victor Stinner74419f02020-07-03 11:35:37 +02004712 Py_INCREF(state->BitXor_singleton);
4713 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004714 case BitAnd:
Victor Stinner74419f02020-07-03 11:35:37 +02004715 Py_INCREF(state->BitAnd_singleton);
4716 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004717 case FloorDiv:
Victor Stinner74419f02020-07-03 11:35:37 +02004718 Py_INCREF(state->FloorDiv_singleton);
4719 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004720 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004721 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004722}
Victor Stinner5cf47822020-11-02 22:03:28 +01004723PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004724{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004725 switch(o) {
4726 case Invert:
Victor Stinner74419f02020-07-03 11:35:37 +02004727 Py_INCREF(state->Invert_singleton);
4728 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004729 case Not:
Victor Stinner74419f02020-07-03 11:35:37 +02004730 Py_INCREF(state->Not_singleton);
4731 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004732 case UAdd:
Victor Stinner74419f02020-07-03 11:35:37 +02004733 Py_INCREF(state->UAdd_singleton);
4734 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004735 case USub:
Victor Stinner74419f02020-07-03 11:35:37 +02004736 Py_INCREF(state->USub_singleton);
4737 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004738 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004739 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004740}
Victor Stinner5cf47822020-11-02 22:03:28 +01004741PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004742{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004743 switch(o) {
4744 case Eq:
Victor Stinner74419f02020-07-03 11:35:37 +02004745 Py_INCREF(state->Eq_singleton);
4746 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004747 case NotEq:
Victor Stinner74419f02020-07-03 11:35:37 +02004748 Py_INCREF(state->NotEq_singleton);
4749 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004750 case Lt:
Victor Stinner74419f02020-07-03 11:35:37 +02004751 Py_INCREF(state->Lt_singleton);
4752 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004753 case LtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004754 Py_INCREF(state->LtE_singleton);
4755 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004756 case Gt:
Victor Stinner74419f02020-07-03 11:35:37 +02004757 Py_INCREF(state->Gt_singleton);
4758 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004759 case GtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004760 Py_INCREF(state->GtE_singleton);
4761 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004762 case Is:
Victor Stinner74419f02020-07-03 11:35:37 +02004763 Py_INCREF(state->Is_singleton);
4764 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004765 case IsNot:
Victor Stinner74419f02020-07-03 11:35:37 +02004766 Py_INCREF(state->IsNot_singleton);
4767 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004768 case In:
Victor Stinner74419f02020-07-03 11:35:37 +02004769 Py_INCREF(state->In_singleton);
4770 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004771 case NotIn:
Victor Stinner74419f02020-07-03 11:35:37 +02004772 Py_INCREF(state->NotIn_singleton);
4773 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004774 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004775 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004776}
4777PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004778ast2obj_comprehension(struct ast_state *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004779{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004780 comprehension_ty o = (comprehension_ty)_o;
4781 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004782 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004783 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004784 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004785 }
Victor Stinner74419f02020-07-03 11:35:37 +02004786 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004787 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004788 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004789 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004790 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004791 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004792 goto failed;
4793 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004794 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004795 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004796 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004797 goto failed;
4798 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004799 value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004800 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004801 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004802 goto failed;
4803 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004804 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004805 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004806 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004807 goto failed;
4808 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004809 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004810failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004811 Py_XDECREF(value);
4812 Py_XDECREF(result);
4813 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004814}
4815
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004816PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004817ast2obj_excepthandler(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004818{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004819 excepthandler_ty o = (excepthandler_ty)_o;
4820 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004821 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004822 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004823 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004824 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004825 switch (o->kind) {
4826 case ExceptHandler_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004827 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004828 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004829 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004830 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004831 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004832 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004833 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004834 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004835 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004836 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004837 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004838 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004839 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004840 value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
4841 ast2obj_stmt);
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->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004844 goto failed;
4845 Py_DECREF(value);
4846 break;
4847 }
Victor Stinner74419f02020-07-03 11:35:37 +02004848 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004849 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004850 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004851 goto failed;
4852 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004853 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004854 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004855 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004856 goto failed;
4857 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004858 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004859 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004860 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004861 goto failed;
4862 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004863 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004864 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004865 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004866 goto failed;
4867 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004868 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004869failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004870 Py_XDECREF(value);
4871 Py_XDECREF(result);
4872 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004873}
4874
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004875PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004876ast2obj_arguments(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004877{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004878 arguments_ty o = (arguments_ty)_o;
4879 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004880 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004881 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004882 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004883 }
Victor Stinner74419f02020-07-03 11:35:37 +02004884 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004885 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004886 if (!result) return NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004887 value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004888 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004889 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004890 goto failed;
4891 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004892 value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004893 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004894 if (PyObject_SetAttr(result, state->args, value) == -1)
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004895 goto failed;
4896 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004897 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004898 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004899 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004900 goto failed;
4901 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004902 value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004903 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004904 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004905 goto failed;
4906 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004907 value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004908 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004909 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004910 goto failed;
4911 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004912 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004913 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004914 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004915 goto failed;
4916 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004917 value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004918 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004919 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004920 goto failed;
4921 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004922 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004923failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004924 Py_XDECREF(value);
4925 Py_XDECREF(result);
4926 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004927}
4928
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004929PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004930ast2obj_arg(struct ast_state *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004931{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004932 arg_ty o = (arg_ty)_o;
4933 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004934 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004935 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004936 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004937 }
Victor Stinner74419f02020-07-03 11:35:37 +02004938 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004939 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004940 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004941 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004942 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004943 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004944 goto failed;
4945 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004946 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004947 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004948 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004949 goto failed;
4950 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004951 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004952 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004953 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004954 goto failed;
4955 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004956 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004957 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004958 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004959 goto failed;
4960 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004961 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004962 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004963 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004964 goto failed;
4965 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004966 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004967 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004968 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004969 goto failed;
4970 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004971 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004972 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004973 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004974 goto failed;
4975 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004976 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004977failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004978 Py_XDECREF(value);
4979 Py_XDECREF(result);
4980 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004981}
4982
4983PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004984ast2obj_keyword(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004985{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004986 keyword_ty o = (keyword_ty)_o;
4987 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004988 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004989 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004990 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004991 }
Victor Stinner74419f02020-07-03 11:35:37 +02004992 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004993 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004994 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004995 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004996 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004997 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004998 goto failed;
4999 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005000 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005001 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005002 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005003 goto failed;
5004 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005005 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01005006 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005007 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01005008 goto failed;
5009 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005010 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01005011 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005012 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01005013 goto failed;
5014 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005015 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01005016 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005017 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01005018 goto failed;
5019 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005020 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01005021 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005022 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01005023 goto failed;
5024 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005025 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00005026failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005027 Py_XDECREF(value);
5028 Py_XDECREF(result);
5029 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005030}
5031
Martin v. Löwisbd260da2006-02-26 19:42:26 +00005032PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01005033ast2obj_alias(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005034{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005035 alias_ty o = (alias_ty)_o;
5036 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005037 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005038 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02005039 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005040 }
Victor Stinner74419f02020-07-03 11:35:37 +02005041 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005042 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005043 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02005044 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005045 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005046 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005047 goto failed;
5048 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005049 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005050 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005051 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005052 goto failed;
5053 Py_DECREF(value);
Matthew Suozzo75a06f02021-04-10 16:56:28 -04005054 value = ast2obj_int(state, o->lineno);
5055 if (!value) goto failed;
5056 if (PyObject_SetAttr(result, state->lineno, value) < 0)
5057 goto failed;
5058 Py_DECREF(value);
5059 value = ast2obj_int(state, o->col_offset);
5060 if (!value) goto failed;
5061 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
5062 goto failed;
5063 Py_DECREF(value);
5064 value = ast2obj_int(state, o->end_lineno);
5065 if (!value) goto failed;
5066 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
5067 goto failed;
5068 Py_DECREF(value);
5069 value = ast2obj_int(state, o->end_col_offset);
5070 if (!value) goto failed;
5071 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
5072 goto failed;
5073 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005074 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00005075failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005076 Py_XDECREF(value);
5077 Py_XDECREF(result);
5078 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005079}
5080
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05005081PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01005082ast2obj_withitem(struct ast_state *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05005083{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005084 withitem_ty o = (withitem_ty)_o;
5085 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005086 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005087 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02005088 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005089 }
Victor Stinner74419f02020-07-03 11:35:37 +02005090 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005091 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005092 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02005093 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005094 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005095 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005096 goto failed;
5097 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005098 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005099 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005100 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005101 goto failed;
5102 Py_DECREF(value);
5103 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05005104failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005105 Py_XDECREF(value);
5106 Py_XDECREF(result);
5107 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05005108}
5109
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005110PyObject*
Brandt Bucher145bf262021-02-26 14:51:55 -08005111ast2obj_match_case(struct ast_state *state, void* _o)
5112{
5113 match_case_ty o = (match_case_ty)_o;
5114 PyObject *result = NULL, *value = NULL;
5115 PyTypeObject *tp;
5116 if (!o) {
5117 Py_RETURN_NONE;
5118 }
5119 tp = (PyTypeObject *)state->match_case_type;
5120 result = PyType_GenericNew(tp, NULL, NULL);
5121 if (!result) return NULL;
Nick Coghlan1e7b8582021-04-29 15:58:44 +10005122 value = ast2obj_pattern(state, o->pattern);
Brandt Bucher145bf262021-02-26 14:51:55 -08005123 if (!value) goto failed;
5124 if (PyObject_SetAttr(result, state->pattern, value) == -1)
5125 goto failed;
5126 Py_DECREF(value);
5127 value = ast2obj_expr(state, o->guard);
5128 if (!value) goto failed;
5129 if (PyObject_SetAttr(result, state->guard, value) == -1)
5130 goto failed;
5131 Py_DECREF(value);
5132 value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
5133 if (!value) goto failed;
5134 if (PyObject_SetAttr(result, state->body, value) == -1)
5135 goto failed;
5136 Py_DECREF(value);
5137 return result;
5138failed:
5139 Py_XDECREF(value);
5140 Py_XDECREF(result);
5141 return NULL;
5142}
5143
5144PyObject*
Nick Coghlan1e7b8582021-04-29 15:58:44 +10005145ast2obj_pattern(struct ast_state *state, void* _o)
5146{
5147 pattern_ty o = (pattern_ty)_o;
5148 PyObject *result = NULL, *value = NULL;
5149 PyTypeObject *tp;
5150 if (!o) {
5151 Py_RETURN_NONE;
5152 }
5153 switch (o->kind) {
5154 case MatchValue_kind:
5155 tp = (PyTypeObject *)state->MatchValue_type;
5156 result = PyType_GenericNew(tp, NULL, NULL);
5157 if (!result) goto failed;
5158 value = ast2obj_expr(state, o->v.MatchValue.value);
5159 if (!value) goto failed;
5160 if (PyObject_SetAttr(result, state->value, value) == -1)
5161 goto failed;
5162 Py_DECREF(value);
5163 break;
5164 case MatchSingleton_kind:
5165 tp = (PyTypeObject *)state->MatchSingleton_type;
5166 result = PyType_GenericNew(tp, NULL, NULL);
5167 if (!result) goto failed;
5168 value = ast2obj_constant(state, o->v.MatchSingleton.value);
5169 if (!value) goto failed;
5170 if (PyObject_SetAttr(result, state->value, value) == -1)
5171 goto failed;
5172 Py_DECREF(value);
5173 break;
5174 case MatchSequence_kind:
5175 tp = (PyTypeObject *)state->MatchSequence_type;
5176 result = PyType_GenericNew(tp, NULL, NULL);
5177 if (!result) goto failed;
5178 value = ast2obj_list(state, (asdl_seq*)o->v.MatchSequence.patterns,
5179 ast2obj_pattern);
5180 if (!value) goto failed;
5181 if (PyObject_SetAttr(result, state->patterns, value) == -1)
5182 goto failed;
5183 Py_DECREF(value);
5184 break;
5185 case MatchMapping_kind:
5186 tp = (PyTypeObject *)state->MatchMapping_type;
5187 result = PyType_GenericNew(tp, NULL, NULL);
5188 if (!result) goto failed;
5189 value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.keys,
5190 ast2obj_expr);
5191 if (!value) goto failed;
5192 if (PyObject_SetAttr(result, state->keys, value) == -1)
5193 goto failed;
5194 Py_DECREF(value);
5195 value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.patterns,
5196 ast2obj_pattern);
5197 if (!value) goto failed;
5198 if (PyObject_SetAttr(result, state->patterns, value) == -1)
5199 goto failed;
5200 Py_DECREF(value);
5201 value = ast2obj_identifier(state, o->v.MatchMapping.rest);
5202 if (!value) goto failed;
5203 if (PyObject_SetAttr(result, state->rest, value) == -1)
5204 goto failed;
5205 Py_DECREF(value);
5206 break;
5207 case MatchClass_kind:
5208 tp = (PyTypeObject *)state->MatchClass_type;
5209 result = PyType_GenericNew(tp, NULL, NULL);
5210 if (!result) goto failed;
5211 value = ast2obj_expr(state, o->v.MatchClass.cls);
5212 if (!value) goto failed;
5213 if (PyObject_SetAttr(result, state->cls, value) == -1)
5214 goto failed;
5215 Py_DECREF(value);
5216 value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.patterns,
5217 ast2obj_pattern);
5218 if (!value) goto failed;
5219 if (PyObject_SetAttr(result, state->patterns, value) == -1)
5220 goto failed;
5221 Py_DECREF(value);
5222 value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_attrs,
5223 ast2obj_identifier);
5224 if (!value) goto failed;
5225 if (PyObject_SetAttr(result, state->kwd_attrs, value) == -1)
5226 goto failed;
5227 Py_DECREF(value);
5228 value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_patterns,
5229 ast2obj_pattern);
5230 if (!value) goto failed;
5231 if (PyObject_SetAttr(result, state->kwd_patterns, value) == -1)
5232 goto failed;
5233 Py_DECREF(value);
5234 break;
5235 case MatchStar_kind:
5236 tp = (PyTypeObject *)state->MatchStar_type;
5237 result = PyType_GenericNew(tp, NULL, NULL);
5238 if (!result) goto failed;
5239 value = ast2obj_identifier(state, o->v.MatchStar.name);
5240 if (!value) goto failed;
5241 if (PyObject_SetAttr(result, state->name, value) == -1)
5242 goto failed;
5243 Py_DECREF(value);
5244 break;
5245 case MatchAs_kind:
5246 tp = (PyTypeObject *)state->MatchAs_type;
5247 result = PyType_GenericNew(tp, NULL, NULL);
5248 if (!result) goto failed;
5249 value = ast2obj_pattern(state, o->v.MatchAs.pattern);
5250 if (!value) goto failed;
5251 if (PyObject_SetAttr(result, state->pattern, value) == -1)
5252 goto failed;
5253 Py_DECREF(value);
5254 value = ast2obj_identifier(state, o->v.MatchAs.name);
5255 if (!value) goto failed;
5256 if (PyObject_SetAttr(result, state->name, value) == -1)
5257 goto failed;
5258 Py_DECREF(value);
5259 break;
5260 case MatchOr_kind:
5261 tp = (PyTypeObject *)state->MatchOr_type;
5262 result = PyType_GenericNew(tp, NULL, NULL);
5263 if (!result) goto failed;
5264 value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
5265 ast2obj_pattern);
5266 if (!value) goto failed;
5267 if (PyObject_SetAttr(result, state->patterns, value) == -1)
5268 goto failed;
5269 Py_DECREF(value);
5270 break;
5271 }
5272 value = ast2obj_int(state, o->lineno);
5273 if (!value) goto failed;
5274 if (PyObject_SetAttr(result, state->lineno, value) < 0)
5275 goto failed;
5276 Py_DECREF(value);
5277 value = ast2obj_int(state, o->col_offset);
5278 if (!value) goto failed;
5279 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
5280 goto failed;
5281 Py_DECREF(value);
5282 value = ast2obj_int(state, o->end_lineno);
5283 if (!value) goto failed;
5284 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
5285 goto failed;
5286 Py_DECREF(value);
5287 value = ast2obj_int(state, o->end_col_offset);
5288 if (!value) goto failed;
5289 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
5290 goto failed;
5291 Py_DECREF(value);
5292 return result;
5293failed:
5294 Py_XDECREF(value);
5295 Py_XDECREF(result);
5296 return NULL;
5297}
5298
5299PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01005300ast2obj_type_ignore(struct ast_state *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005301{
5302 type_ignore_ty o = (type_ignore_ty)_o;
5303 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005304 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005305 if (!o) {
5306 Py_RETURN_NONE;
5307 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005308 switch (o->kind) {
5309 case TypeIgnore_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02005310 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005311 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005312 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005313 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005314 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005315 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005316 goto failed;
5317 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02005318 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07005319 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02005320 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07005321 goto failed;
5322 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005323 break;
5324 }
5325 return result;
5326failed:
5327 Py_XDECREF(value);
5328 Py_XDECREF(result);
5329 return NULL;
5330}
5331
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005332
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005333int
Victor Stinner5cf47822020-11-02 22:03:28 +01005334obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005335{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005336 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005337
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005338 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005339 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005340
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005341 if (obj == Py_None) {
5342 *out = NULL;
5343 return 0;
5344 }
Victor Stinner74419f02020-07-03 11:35:37 +02005345 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005346 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005347 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005348 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005349 }
5350 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005351 asdl_stmt_seq* body;
5352 asdl_type_ignore_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005353
Victor Stinner74419f02020-07-03 11:35:37 +02005354 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005355 return 1;
5356 }
5357 if (tmp == NULL) {
5358 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
5359 return 1;
5360 }
5361 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005362 int res;
5363 Py_ssize_t len;
5364 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005365 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005366 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 +02005367 goto failed;
5368 }
5369 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005370 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005371 if (body == NULL) goto failed;
5372 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005373 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005374 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5375 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005376 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005377 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005378 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005379 if (len != PyList_GET_SIZE(tmp)) {
5380 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
5381 goto failed;
5382 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005383 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005384 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005385 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005386 }
Victor Stinner74419f02020-07-03 11:35:37 +02005387 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005388 return 1;
5389 }
5390 if (tmp == NULL) {
5391 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
5392 return 1;
5393 }
5394 else {
5395 int res;
5396 Py_ssize_t len;
5397 Py_ssize_t i;
5398 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005399 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 -08005400 goto failed;
5401 }
5402 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005403 type_ignores = _Py_asdl_type_ignore_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005404 if (type_ignores == NULL) goto failed;
5405 for (i = 0; i < len; i++) {
5406 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005407 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5408 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005409 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005410 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005411 if (res != 0) goto failed;
5412 if (len != PyList_GET_SIZE(tmp)) {
5413 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
5414 goto failed;
5415 }
5416 asdl_seq_SET(type_ignores, i, val);
5417 }
5418 Py_CLEAR(tmp);
5419 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005420 *out = _PyAST_Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005421 if (*out == NULL) goto failed;
5422 return 0;
5423 }
Victor Stinner74419f02020-07-03 11:35:37 +02005424 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005425 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005426 if (isinstance == -1) {
5427 return 1;
5428 }
5429 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005430 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005431
Victor Stinner74419f02020-07-03 11:35:37 +02005432 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005433 return 1;
5434 }
5435 if (tmp == NULL) {
5436 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
5437 return 1;
5438 }
5439 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005440 int res;
5441 Py_ssize_t len;
5442 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005443 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005444 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 +02005445 goto failed;
5446 }
5447 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005448 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005449 if (body == NULL) goto failed;
5450 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005451 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005452 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5453 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005454 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005455 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005456 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005457 if (len != PyList_GET_SIZE(tmp)) {
5458 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5459 goto failed;
5460 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005461 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005462 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005463 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005464 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005465 *out = _PyAST_Interactive(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005466 if (*out == NULL) goto failed;
5467 return 0;
5468 }
Victor Stinner74419f02020-07-03 11:35:37 +02005469 tp = state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005470 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005471 if (isinstance == -1) {
5472 return 1;
5473 }
5474 if (isinstance) {
5475 expr_ty body;
5476
Victor Stinner74419f02020-07-03 11:35:37 +02005477 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005478 return 1;
5479 }
5480 if (tmp == NULL) {
5481 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
5482 return 1;
5483 }
5484 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005485 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005486 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005487 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005488 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005489 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005490 *out = _PyAST_Expression(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005491 if (*out == NULL) goto failed;
5492 return 0;
5493 }
Victor Stinner74419f02020-07-03 11:35:37 +02005494 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005495 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005496 if (isinstance == -1) {
5497 return 1;
5498 }
5499 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005500 asdl_expr_seq* argtypes;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005501 expr_ty returns;
5502
Victor Stinner74419f02020-07-03 11:35:37 +02005503 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005504 return 1;
5505 }
5506 if (tmp == NULL) {
5507 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5508 return 1;
5509 }
5510 else {
5511 int res;
5512 Py_ssize_t len;
5513 Py_ssize_t i;
5514 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005515 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 -08005516 goto failed;
5517 }
5518 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005519 argtypes = _Py_asdl_expr_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005520 if (argtypes == NULL) goto failed;
5521 for (i = 0; i < len; i++) {
5522 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005523 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5524 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005525 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005526 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005527 if (res != 0) goto failed;
5528 if (len != PyList_GET_SIZE(tmp)) {
5529 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5530 goto failed;
5531 }
5532 asdl_seq_SET(argtypes, i, val);
5533 }
5534 Py_CLEAR(tmp);
5535 }
Victor Stinner74419f02020-07-03 11:35:37 +02005536 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005537 return 1;
5538 }
5539 if (tmp == NULL) {
5540 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5541 return 1;
5542 }
5543 else {
5544 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005545 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005546 if (res != 0) goto failed;
5547 Py_CLEAR(tmp);
5548 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005549 *out = _PyAST_FunctionType(argtypes, returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005550 if (*out == NULL) goto failed;
5551 return 0;
5552 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005553
5554 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5555 failed:
5556 Py_XDECREF(tmp);
5557 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005558}
5559
5560int
Victor Stinner5cf47822020-11-02 22:03:28 +01005561obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
5562 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005563{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005564 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005565
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005566 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005567 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005568 int lineno;
5569 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005570 int end_lineno;
5571 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005572
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005573 if (obj == Py_None) {
5574 *out = NULL;
5575 return 0;
5576 }
Victor Stinner74419f02020-07-03 11:35:37 +02005577 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005578 return 1;
5579 }
5580 if (tmp == NULL) {
5581 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5582 return 1;
5583 }
5584 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005585 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005586 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005587 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005588 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005589 }
Victor Stinner74419f02020-07-03 11:35:37 +02005590 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005591 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005592 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005593 if (tmp == NULL) {
5594 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5595 return 1;
5596 }
5597 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005598 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005599 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005600 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005601 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005602 }
Victor Stinner74419f02020-07-03 11:35:37 +02005603 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005604 return 1;
5605 }
5606 if (tmp == NULL || tmp == Py_None) {
5607 Py_CLEAR(tmp);
5608 end_lineno = 0;
5609 }
5610 else {
5611 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005612 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005613 if (res != 0) goto failed;
5614 Py_CLEAR(tmp);
5615 }
Victor Stinner74419f02020-07-03 11:35:37 +02005616 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005617 return 1;
5618 }
5619 if (tmp == NULL || tmp == Py_None) {
5620 Py_CLEAR(tmp);
5621 end_col_offset = 0;
5622 }
5623 else {
5624 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005625 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005626 if (res != 0) goto failed;
5627 Py_CLEAR(tmp);
5628 }
Victor Stinner74419f02020-07-03 11:35:37 +02005629 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005630 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005631 if (isinstance == -1) {
5632 return 1;
5633 }
5634 if (isinstance) {
5635 identifier name;
5636 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005637 asdl_stmt_seq* body;
5638 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005639 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005640 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005641
Victor Stinner74419f02020-07-03 11:35:37 +02005642 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005643 return 1;
5644 }
5645 if (tmp == NULL) {
5646 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5647 return 1;
5648 }
5649 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005650 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005651 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005652 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005653 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005654 }
Victor Stinner74419f02020-07-03 11:35:37 +02005655 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005656 return 1;
5657 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005658 if (tmp == NULL) {
5659 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5660 return 1;
5661 }
5662 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005663 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005664 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005665 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005666 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005667 }
Victor Stinner74419f02020-07-03 11:35:37 +02005668 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005669 return 1;
5670 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005671 if (tmp == NULL) {
5672 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5673 return 1;
5674 }
5675 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005676 int res;
5677 Py_ssize_t len;
5678 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005679 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005680 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 +02005681 goto failed;
5682 }
5683 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005684 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005685 if (body == NULL) goto failed;
5686 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005687 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005688 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5689 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005690 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005691 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005692 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005693 if (len != PyList_GET_SIZE(tmp)) {
5694 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5695 goto failed;
5696 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005697 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005698 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005699 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005700 }
Victor Stinner74419f02020-07-03 11:35:37 +02005701 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005702 return 1;
5703 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005704 if (tmp == NULL) {
5705 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5706 return 1;
5707 }
5708 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005709 int res;
5710 Py_ssize_t len;
5711 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005712 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005713 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 +02005714 goto failed;
5715 }
5716 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005717 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005718 if (decorator_list == NULL) goto failed;
5719 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005720 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005721 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5722 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005723 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005724 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005725 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005726 if (len != PyList_GET_SIZE(tmp)) {
5727 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5728 goto failed;
5729 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005730 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005731 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005732 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005733 }
Victor Stinner74419f02020-07-03 11:35:37 +02005734 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005735 return 1;
5736 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005737 if (tmp == NULL || tmp == Py_None) {
5738 Py_CLEAR(tmp);
5739 returns = NULL;
5740 }
5741 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005742 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005743 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005744 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005745 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005746 }
Victor Stinner74419f02020-07-03 11:35:37 +02005747 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005748 return 1;
5749 }
5750 if (tmp == NULL || tmp == Py_None) {
5751 Py_CLEAR(tmp);
5752 type_comment = NULL;
5753 }
5754 else {
5755 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005756 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005757 if (res != 0) goto failed;
5758 Py_CLEAR(tmp);
5759 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005760 *out = _PyAST_FunctionDef(name, args, body, decorator_list, returns,
5761 type_comment, lineno, col_offset, end_lineno,
5762 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005763 if (*out == NULL) goto failed;
5764 return 0;
5765 }
Victor Stinner74419f02020-07-03 11:35:37 +02005766 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005767 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005768 if (isinstance == -1) {
5769 return 1;
5770 }
5771 if (isinstance) {
5772 identifier name;
5773 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005774 asdl_stmt_seq* body;
5775 asdl_expr_seq* decorator_list;
Yury Selivanov75445082015-05-11 22:57:16 -04005776 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005777 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005778
Victor Stinner74419f02020-07-03 11:35:37 +02005779 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005780 return 1;
5781 }
5782 if (tmp == NULL) {
5783 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5784 return 1;
5785 }
5786 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005787 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005788 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005789 if (res != 0) goto failed;
5790 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005791 }
Victor Stinner74419f02020-07-03 11:35:37 +02005792 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005793 return 1;
5794 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005795 if (tmp == NULL) {
5796 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5797 return 1;
5798 }
5799 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005800 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005801 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005802 if (res != 0) goto failed;
5803 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005804 }
Victor Stinner74419f02020-07-03 11:35:37 +02005805 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005806 return 1;
5807 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005808 if (tmp == NULL) {
5809 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5810 return 1;
5811 }
5812 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005813 int res;
5814 Py_ssize_t len;
5815 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005816 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005817 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 -04005818 goto failed;
5819 }
5820 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005821 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005822 if (body == NULL) goto failed;
5823 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005824 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005825 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5826 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005827 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005828 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005829 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005830 if (len != PyList_GET_SIZE(tmp)) {
5831 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5832 goto failed;
5833 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005834 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005835 }
5836 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005837 }
Victor Stinner74419f02020-07-03 11:35:37 +02005838 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005839 return 1;
5840 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005841 if (tmp == NULL) {
5842 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5843 return 1;
5844 }
5845 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005846 int res;
5847 Py_ssize_t len;
5848 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005849 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005850 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 -04005851 goto failed;
5852 }
5853 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005854 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005855 if (decorator_list == NULL) goto failed;
5856 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005857 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005858 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5859 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005860 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005861 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005862 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005863 if (len != PyList_GET_SIZE(tmp)) {
5864 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5865 goto failed;
5866 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005867 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005868 }
5869 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005870 }
Victor Stinner74419f02020-07-03 11:35:37 +02005871 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005872 return 1;
5873 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005874 if (tmp == NULL || tmp == Py_None) {
5875 Py_CLEAR(tmp);
5876 returns = NULL;
5877 }
5878 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005879 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005880 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005881 if (res != 0) goto failed;
5882 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005883 }
Victor Stinner74419f02020-07-03 11:35:37 +02005884 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005885 return 1;
5886 }
5887 if (tmp == NULL || tmp == Py_None) {
5888 Py_CLEAR(tmp);
5889 type_comment = NULL;
5890 }
5891 else {
5892 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005893 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005894 if (res != 0) goto failed;
5895 Py_CLEAR(tmp);
5896 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005897 *out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list,
5898 returns, type_comment, lineno,
5899 col_offset, end_lineno, end_col_offset,
5900 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005901 if (*out == NULL) goto failed;
5902 return 0;
5903 }
Victor Stinner74419f02020-07-03 11:35:37 +02005904 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005905 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005906 if (isinstance == -1) {
5907 return 1;
5908 }
5909 if (isinstance) {
5910 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005911 asdl_expr_seq* bases;
5912 asdl_keyword_seq* keywords;
5913 asdl_stmt_seq* body;
5914 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005915
Victor Stinner74419f02020-07-03 11:35:37 +02005916 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005917 return 1;
5918 }
5919 if (tmp == NULL) {
5920 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5921 return 1;
5922 }
5923 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005924 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005925 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005926 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005927 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005928 }
Victor Stinner74419f02020-07-03 11:35:37 +02005929 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005930 return 1;
5931 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005932 if (tmp == NULL) {
5933 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5934 return 1;
5935 }
5936 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005937 int res;
5938 Py_ssize_t len;
5939 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005940 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005941 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 +02005942 goto failed;
5943 }
5944 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005945 bases = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005946 if (bases == NULL) goto failed;
5947 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005948 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005949 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5950 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005951 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005952 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005953 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005954 if (len != PyList_GET_SIZE(tmp)) {
5955 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5956 goto failed;
5957 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005958 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005959 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005960 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005961 }
Victor Stinner74419f02020-07-03 11:35:37 +02005962 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005963 return 1;
5964 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005965 if (tmp == NULL) {
5966 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5967 return 1;
5968 }
5969 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005970 int res;
5971 Py_ssize_t len;
5972 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005973 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005974 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 +02005975 goto failed;
5976 }
5977 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005978 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005979 if (keywords == NULL) goto failed;
5980 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005981 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005982 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5983 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005984 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005985 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005986 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005987 if (len != PyList_GET_SIZE(tmp)) {
5988 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5989 goto failed;
5990 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005991 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005992 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005993 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005994 }
Victor Stinner74419f02020-07-03 11:35:37 +02005995 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005996 return 1;
5997 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005998 if (tmp == NULL) {
5999 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
6000 return 1;
6001 }
6002 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006003 int res;
6004 Py_ssize_t len;
6005 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006006 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006007 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 +02006008 goto failed;
6009 }
6010 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006011 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006012 if (body == NULL) goto failed;
6013 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006014 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006015 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6016 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006017 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006018 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006019 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006020 if (len != PyList_GET_SIZE(tmp)) {
6021 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
6022 goto failed;
6023 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006024 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006025 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006026 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006027 }
Victor Stinner74419f02020-07-03 11:35:37 +02006028 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006029 return 1;
6030 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006031 if (tmp == NULL) {
6032 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
6033 return 1;
6034 }
6035 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006036 int res;
6037 Py_ssize_t len;
6038 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006039 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006040 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 +02006041 goto failed;
6042 }
6043 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006044 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006045 if (decorator_list == NULL) goto failed;
6046 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006047 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006048 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6049 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006050 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006051 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006052 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006053 if (len != PyList_GET_SIZE(tmp)) {
6054 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
6055 goto failed;
6056 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006057 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006058 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006059 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006060 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006061 *out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list,
6062 lineno, col_offset, end_lineno, end_col_offset,
6063 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006064 if (*out == NULL) goto failed;
6065 return 0;
6066 }
Victor Stinner74419f02020-07-03 11:35:37 +02006067 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006068 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006069 if (isinstance == -1) {
6070 return 1;
6071 }
6072 if (isinstance) {
6073 expr_ty value;
6074
Victor Stinner74419f02020-07-03 11:35:37 +02006075 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006076 return 1;
6077 }
6078 if (tmp == NULL || tmp == Py_None) {
6079 Py_CLEAR(tmp);
6080 value = NULL;
6081 }
6082 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006083 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006084 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006085 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006086 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006087 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006088 *out = _PyAST_Return(value, lineno, col_offset, end_lineno,
6089 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006090 if (*out == NULL) goto failed;
6091 return 0;
6092 }
Victor Stinner74419f02020-07-03 11:35:37 +02006093 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006094 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006095 if (isinstance == -1) {
6096 return 1;
6097 }
6098 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006099 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006100
Victor Stinner74419f02020-07-03 11:35:37 +02006101 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006102 return 1;
6103 }
6104 if (tmp == NULL) {
6105 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
6106 return 1;
6107 }
6108 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006109 int res;
6110 Py_ssize_t len;
6111 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006112 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006113 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 +02006114 goto failed;
6115 }
6116 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006117 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006118 if (targets == NULL) goto failed;
6119 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006120 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006121 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6122 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006123 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006124 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006125 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006126 if (len != PyList_GET_SIZE(tmp)) {
6127 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
6128 goto failed;
6129 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006130 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006131 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006132 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006133 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006134 *out = _PyAST_Delete(targets, lineno, col_offset, end_lineno,
6135 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006136 if (*out == NULL) goto failed;
6137 return 0;
6138 }
Victor Stinner74419f02020-07-03 11:35:37 +02006139 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006140 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006141 if (isinstance == -1) {
6142 return 1;
6143 }
6144 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006145 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006146 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006147 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006148
Victor Stinner74419f02020-07-03 11:35:37 +02006149 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006150 return 1;
6151 }
6152 if (tmp == NULL) {
6153 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
6154 return 1;
6155 }
6156 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006157 int res;
6158 Py_ssize_t len;
6159 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006160 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006161 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 +02006162 goto failed;
6163 }
6164 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006165 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006166 if (targets == NULL) goto failed;
6167 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006168 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006169 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6170 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006171 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006172 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006173 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006174 if (len != PyList_GET_SIZE(tmp)) {
6175 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
6176 goto failed;
6177 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006178 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006179 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006180 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006181 }
Victor Stinner74419f02020-07-03 11:35:37 +02006182 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006183 return 1;
6184 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006185 if (tmp == NULL) {
6186 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
6187 return 1;
6188 }
6189 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006190 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006191 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006192 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006193 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006194 }
Victor Stinner74419f02020-07-03 11:35:37 +02006195 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006196 return 1;
6197 }
6198 if (tmp == NULL || tmp == Py_None) {
6199 Py_CLEAR(tmp);
6200 type_comment = NULL;
6201 }
6202 else {
6203 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006204 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006205 if (res != 0) goto failed;
6206 Py_CLEAR(tmp);
6207 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006208 *out = _PyAST_Assign(targets, value, type_comment, lineno, col_offset,
6209 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006210 if (*out == NULL) goto failed;
6211 return 0;
6212 }
Victor Stinner74419f02020-07-03 11:35:37 +02006213 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006214 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006215 if (isinstance == -1) {
6216 return 1;
6217 }
6218 if (isinstance) {
6219 expr_ty target;
6220 operator_ty op;
6221 expr_ty value;
6222
Victor Stinner74419f02020-07-03 11:35:37 +02006223 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006224 return 1;
6225 }
6226 if (tmp == NULL) {
6227 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
6228 return 1;
6229 }
6230 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006231 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006232 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006233 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006234 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006235 }
Victor Stinner74419f02020-07-03 11:35:37 +02006236 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006237 return 1;
6238 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006239 if (tmp == NULL) {
6240 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
6241 return 1;
6242 }
6243 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006244 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006245 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006246 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006247 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006248 }
Victor Stinner74419f02020-07-03 11:35:37 +02006249 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006250 return 1;
6251 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006252 if (tmp == NULL) {
6253 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
6254 return 1;
6255 }
6256 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006257 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006258 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006259 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006260 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006261 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006262 *out = _PyAST_AugAssign(target, op, value, lineno, col_offset,
6263 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006264 if (*out == NULL) goto failed;
6265 return 0;
6266 }
Victor Stinner74419f02020-07-03 11:35:37 +02006267 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006268 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006269 if (isinstance == -1) {
6270 return 1;
6271 }
6272 if (isinstance) {
6273 expr_ty target;
6274 expr_ty annotation;
6275 expr_ty value;
6276 int simple;
6277
Victor Stinner74419f02020-07-03 11:35:37 +02006278 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006279 return 1;
6280 }
6281 if (tmp == NULL) {
6282 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
6283 return 1;
6284 }
6285 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006286 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006287 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006288 if (res != 0) goto failed;
6289 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006290 }
Victor Stinner74419f02020-07-03 11:35:37 +02006291 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006292 return 1;
6293 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006294 if (tmp == NULL) {
6295 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
6296 return 1;
6297 }
6298 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006299 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006300 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006301 if (res != 0) goto failed;
6302 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006303 }
Victor Stinner74419f02020-07-03 11:35:37 +02006304 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006305 return 1;
6306 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006307 if (tmp == NULL || tmp == Py_None) {
6308 Py_CLEAR(tmp);
6309 value = NULL;
6310 }
6311 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006312 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006313 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006314 if (res != 0) goto failed;
6315 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006316 }
Victor Stinner74419f02020-07-03 11:35:37 +02006317 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006318 return 1;
6319 }
6320 if (tmp == NULL) {
6321 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
6322 return 1;
6323 }
6324 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006325 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006326 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006327 if (res != 0) goto failed;
6328 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006329 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006330 *out = _PyAST_AnnAssign(target, annotation, value, simple, lineno,
6331 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07006332 if (*out == NULL) goto failed;
6333 return 0;
6334 }
Victor Stinner74419f02020-07-03 11:35:37 +02006335 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006336 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006337 if (isinstance == -1) {
6338 return 1;
6339 }
6340 if (isinstance) {
6341 expr_ty target;
6342 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006343 asdl_stmt_seq* body;
6344 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006345 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006346
Victor Stinner74419f02020-07-03 11:35:37 +02006347 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006348 return 1;
6349 }
6350 if (tmp == NULL) {
6351 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
6352 return 1;
6353 }
6354 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006355 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006356 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006357 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006358 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006359 }
Victor Stinner74419f02020-07-03 11:35:37 +02006360 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006361 return 1;
6362 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006363 if (tmp == NULL) {
6364 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
6365 return 1;
6366 }
6367 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006368 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006369 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006370 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006371 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006372 }
Victor Stinner74419f02020-07-03 11:35:37 +02006373 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006374 return 1;
6375 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006376 if (tmp == NULL) {
6377 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
6378 return 1;
6379 }
6380 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006381 int res;
6382 Py_ssize_t len;
6383 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006384 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006385 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 +02006386 goto failed;
6387 }
6388 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006389 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006390 if (body == NULL) goto failed;
6391 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006392 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006393 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6394 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006395 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006396 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006397 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006398 if (len != PyList_GET_SIZE(tmp)) {
6399 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
6400 goto failed;
6401 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006402 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006403 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006404 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006405 }
Victor Stinner74419f02020-07-03 11:35:37 +02006406 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006407 return 1;
6408 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006409 if (tmp == NULL) {
6410 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
6411 return 1;
6412 }
6413 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006414 int res;
6415 Py_ssize_t len;
6416 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006417 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006418 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 +02006419 goto failed;
6420 }
6421 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006422 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006423 if (orelse == NULL) goto failed;
6424 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006425 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006426 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6427 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006428 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006429 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006430 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006431 if (len != PyList_GET_SIZE(tmp)) {
6432 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
6433 goto failed;
6434 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006435 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006436 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006437 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006438 }
Victor Stinner74419f02020-07-03 11:35:37 +02006439 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006440 return 1;
6441 }
6442 if (tmp == NULL || tmp == Py_None) {
6443 Py_CLEAR(tmp);
6444 type_comment = NULL;
6445 }
6446 else {
6447 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006448 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006449 if (res != 0) goto failed;
6450 Py_CLEAR(tmp);
6451 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006452 *out = _PyAST_For(target, iter, body, orelse, type_comment, lineno,
6453 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006454 if (*out == NULL) goto failed;
6455 return 0;
6456 }
Victor Stinner74419f02020-07-03 11:35:37 +02006457 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006458 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006459 if (isinstance == -1) {
6460 return 1;
6461 }
6462 if (isinstance) {
6463 expr_ty target;
6464 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006465 asdl_stmt_seq* body;
6466 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006467 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006468
Victor Stinner74419f02020-07-03 11:35:37 +02006469 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006470 return 1;
6471 }
6472 if (tmp == NULL) {
6473 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6474 return 1;
6475 }
6476 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006477 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006478 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006479 if (res != 0) goto failed;
6480 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006481 }
Victor Stinner74419f02020-07-03 11:35:37 +02006482 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006483 return 1;
6484 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006485 if (tmp == NULL) {
6486 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6487 return 1;
6488 }
6489 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006490 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006491 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006492 if (res != 0) goto failed;
6493 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006494 }
Victor Stinner74419f02020-07-03 11:35:37 +02006495 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006496 return 1;
6497 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006498 if (tmp == NULL) {
6499 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6500 return 1;
6501 }
6502 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006503 int res;
6504 Py_ssize_t len;
6505 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006506 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006507 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 -04006508 goto failed;
6509 }
6510 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006511 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006512 if (body == NULL) goto failed;
6513 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006514 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006515 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6516 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006517 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006518 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006519 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006520 if (len != PyList_GET_SIZE(tmp)) {
6521 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6522 goto failed;
6523 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006524 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006525 }
6526 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006527 }
Victor Stinner74419f02020-07-03 11:35:37 +02006528 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006529 return 1;
6530 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006531 if (tmp == NULL) {
6532 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6533 return 1;
6534 }
6535 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006536 int res;
6537 Py_ssize_t len;
6538 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006539 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006540 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 -04006541 goto failed;
6542 }
6543 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006544 orelse = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006545 if (orelse == NULL) goto failed;
6546 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006547 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006548 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6549 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006550 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006551 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006552 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006553 if (len != PyList_GET_SIZE(tmp)) {
6554 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6555 goto failed;
6556 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006557 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006558 }
6559 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006560 }
Victor Stinner74419f02020-07-03 11:35:37 +02006561 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006562 return 1;
6563 }
6564 if (tmp == NULL || tmp == Py_None) {
6565 Py_CLEAR(tmp);
6566 type_comment = NULL;
6567 }
6568 else {
6569 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006570 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006571 if (res != 0) goto failed;
6572 Py_CLEAR(tmp);
6573 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006574 *out = _PyAST_AsyncFor(target, iter, body, orelse, type_comment,
6575 lineno, col_offset, end_lineno, end_col_offset,
6576 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006577 if (*out == NULL) goto failed;
6578 return 0;
6579 }
Victor Stinner74419f02020-07-03 11:35:37 +02006580 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006581 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006582 if (isinstance == -1) {
6583 return 1;
6584 }
6585 if (isinstance) {
6586 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006587 asdl_stmt_seq* body;
6588 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006589
Victor Stinner74419f02020-07-03 11:35:37 +02006590 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006591 return 1;
6592 }
6593 if (tmp == NULL) {
6594 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6595 return 1;
6596 }
6597 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006598 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006599 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006600 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006601 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006602 }
Victor Stinner74419f02020-07-03 11:35:37 +02006603 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006604 return 1;
6605 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006606 if (tmp == NULL) {
6607 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6608 return 1;
6609 }
6610 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006611 int res;
6612 Py_ssize_t len;
6613 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006614 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006615 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 +02006616 goto failed;
6617 }
6618 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006619 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006620 if (body == NULL) goto failed;
6621 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006622 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006623 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6624 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006625 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006626 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006627 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006628 if (len != PyList_GET_SIZE(tmp)) {
6629 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6630 goto failed;
6631 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006632 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006633 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006634 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006635 }
Victor Stinner74419f02020-07-03 11:35:37 +02006636 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006637 return 1;
6638 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006639 if (tmp == NULL) {
6640 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6641 return 1;
6642 }
6643 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006644 int res;
6645 Py_ssize_t len;
6646 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006647 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006648 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 +02006649 goto failed;
6650 }
6651 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006652 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006653 if (orelse == NULL) goto failed;
6654 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006655 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006656 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6657 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006658 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006659 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006660 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006661 if (len != PyList_GET_SIZE(tmp)) {
6662 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6663 goto failed;
6664 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006665 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006666 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006667 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006668 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006669 *out = _PyAST_While(test, body, orelse, lineno, col_offset, end_lineno,
6670 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006671 if (*out == NULL) goto failed;
6672 return 0;
6673 }
Victor Stinner74419f02020-07-03 11:35:37 +02006674 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006675 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006676 if (isinstance == -1) {
6677 return 1;
6678 }
6679 if (isinstance) {
6680 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006681 asdl_stmt_seq* body;
6682 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006683
Victor Stinner74419f02020-07-03 11:35:37 +02006684 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006685 return 1;
6686 }
6687 if (tmp == NULL) {
6688 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6689 return 1;
6690 }
6691 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006692 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006693 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006694 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006695 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006696 }
Victor Stinner74419f02020-07-03 11:35:37 +02006697 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006698 return 1;
6699 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006700 if (tmp == NULL) {
6701 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6702 return 1;
6703 }
6704 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006705 int res;
6706 Py_ssize_t len;
6707 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006708 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006709 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 +02006710 goto failed;
6711 }
6712 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006713 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006714 if (body == NULL) goto failed;
6715 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006716 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006717 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6718 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006719 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006720 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006721 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006722 if (len != PyList_GET_SIZE(tmp)) {
6723 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6724 goto failed;
6725 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006726 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006727 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006728 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006729 }
Victor Stinner74419f02020-07-03 11:35:37 +02006730 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006731 return 1;
6732 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006733 if (tmp == NULL) {
6734 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6735 return 1;
6736 }
6737 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006738 int res;
6739 Py_ssize_t len;
6740 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006741 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006742 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 +02006743 goto failed;
6744 }
6745 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006746 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006747 if (orelse == NULL) goto failed;
6748 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006749 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006750 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6751 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006752 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006753 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006754 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006755 if (len != PyList_GET_SIZE(tmp)) {
6756 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6757 goto failed;
6758 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006759 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006760 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006761 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006762 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006763 *out = _PyAST_If(test, body, orelse, lineno, col_offset, end_lineno,
6764 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006765 if (*out == NULL) goto failed;
6766 return 0;
6767 }
Victor Stinner74419f02020-07-03 11:35:37 +02006768 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006769 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006770 if (isinstance == -1) {
6771 return 1;
6772 }
6773 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006774 asdl_withitem_seq* items;
6775 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006776 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006777
Victor Stinner74419f02020-07-03 11:35:37 +02006778 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006779 return 1;
6780 }
6781 if (tmp == NULL) {
6782 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6783 return 1;
6784 }
6785 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006786 int res;
6787 Py_ssize_t len;
6788 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006789 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006790 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 +02006791 goto failed;
6792 }
6793 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006794 items = _Py_asdl_withitem_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006795 if (items == NULL) goto failed;
6796 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006797 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006798 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6799 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006800 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006801 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006802 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006803 if (len != PyList_GET_SIZE(tmp)) {
6804 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6805 goto failed;
6806 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006807 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006808 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006809 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006810 }
Victor Stinner74419f02020-07-03 11:35:37 +02006811 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006812 return 1;
6813 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006814 if (tmp == NULL) {
6815 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6816 return 1;
6817 }
6818 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006819 int res;
6820 Py_ssize_t len;
6821 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006822 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006823 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 +02006824 goto failed;
6825 }
6826 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006827 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006828 if (body == NULL) goto failed;
6829 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006830 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006831 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6832 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006833 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006834 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006835 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006836 if (len != PyList_GET_SIZE(tmp)) {
6837 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6838 goto failed;
6839 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006840 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006841 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006842 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006843 }
Victor Stinner74419f02020-07-03 11:35:37 +02006844 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006845 return 1;
6846 }
6847 if (tmp == NULL || tmp == Py_None) {
6848 Py_CLEAR(tmp);
6849 type_comment = NULL;
6850 }
6851 else {
6852 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006853 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006854 if (res != 0) goto failed;
6855 Py_CLEAR(tmp);
6856 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006857 *out = _PyAST_With(items, body, type_comment, lineno, col_offset,
6858 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006859 if (*out == NULL) goto failed;
6860 return 0;
6861 }
Victor Stinner74419f02020-07-03 11:35:37 +02006862 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006863 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006864 if (isinstance == -1) {
6865 return 1;
6866 }
6867 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006868 asdl_withitem_seq* items;
6869 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006870 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006871
Victor Stinner74419f02020-07-03 11:35:37 +02006872 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006873 return 1;
6874 }
6875 if (tmp == NULL) {
6876 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6877 return 1;
6878 }
6879 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006880 int res;
6881 Py_ssize_t len;
6882 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006883 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006884 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 -04006885 goto failed;
6886 }
6887 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006888 items = _Py_asdl_withitem_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006889 if (items == NULL) goto failed;
6890 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006891 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006892 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6893 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006894 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006895 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006896 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006897 if (len != PyList_GET_SIZE(tmp)) {
6898 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6899 goto failed;
6900 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006901 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006902 }
6903 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006904 }
Victor Stinner74419f02020-07-03 11:35:37 +02006905 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006906 return 1;
6907 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006908 if (tmp == NULL) {
6909 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6910 return 1;
6911 }
6912 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006913 int res;
6914 Py_ssize_t len;
6915 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006916 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006917 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 -04006918 goto failed;
6919 }
6920 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006921 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006922 if (body == NULL) goto failed;
6923 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006924 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006925 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6926 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006927 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006928 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006929 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006930 if (len != PyList_GET_SIZE(tmp)) {
6931 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6932 goto failed;
6933 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006934 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006935 }
6936 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006937 }
Victor Stinner74419f02020-07-03 11:35:37 +02006938 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006939 return 1;
6940 }
6941 if (tmp == NULL || tmp == Py_None) {
6942 Py_CLEAR(tmp);
6943 type_comment = NULL;
6944 }
6945 else {
6946 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006947 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006948 if (res != 0) goto failed;
6949 Py_CLEAR(tmp);
6950 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006951 *out = _PyAST_AsyncWith(items, body, type_comment, lineno, col_offset,
6952 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006953 if (*out == NULL) goto failed;
6954 return 0;
6955 }
Brandt Bucher145bf262021-02-26 14:51:55 -08006956 tp = state->Match_type;
6957 isinstance = PyObject_IsInstance(obj, tp);
6958 if (isinstance == -1) {
6959 return 1;
6960 }
6961 if (isinstance) {
6962 expr_ty subject;
6963 asdl_match_case_seq* cases;
6964
6965 if (_PyObject_LookupAttr(obj, state->subject, &tmp) < 0) {
6966 return 1;
6967 }
6968 if (tmp == NULL) {
6969 PyErr_SetString(PyExc_TypeError, "required field \"subject\" missing from Match");
6970 return 1;
6971 }
6972 else {
6973 int res;
6974 res = obj2ast_expr(state, tmp, &subject, arena);
6975 if (res != 0) goto failed;
6976 Py_CLEAR(tmp);
6977 }
6978 if (_PyObject_LookupAttr(obj, state->cases, &tmp) < 0) {
6979 return 1;
6980 }
6981 if (tmp == NULL) {
6982 PyErr_SetString(PyExc_TypeError, "required field \"cases\" missing from Match");
6983 return 1;
6984 }
6985 else {
6986 int res;
6987 Py_ssize_t len;
6988 Py_ssize_t i;
6989 if (!PyList_Check(tmp)) {
6990 PyErr_Format(PyExc_TypeError, "Match field \"cases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
6991 goto failed;
6992 }
6993 len = PyList_GET_SIZE(tmp);
6994 cases = _Py_asdl_match_case_seq_new(len, arena);
6995 if (cases == NULL) goto failed;
6996 for (i = 0; i < len; i++) {
6997 match_case_ty val;
6998 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6999 Py_INCREF(tmp2);
7000 res = obj2ast_match_case(state, tmp2, &val, arena);
7001 Py_DECREF(tmp2);
7002 if (res != 0) goto failed;
7003 if (len != PyList_GET_SIZE(tmp)) {
7004 PyErr_SetString(PyExc_RuntimeError, "Match field \"cases\" changed size during iteration");
7005 goto failed;
7006 }
7007 asdl_seq_SET(cases, i, val);
7008 }
7009 Py_CLEAR(tmp);
7010 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007011 *out = _PyAST_Match(subject, cases, lineno, col_offset, end_lineno,
7012 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08007013 if (*out == NULL) goto failed;
7014 return 0;
7015 }
Victor Stinner74419f02020-07-03 11:35:37 +02007016 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007017 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007018 if (isinstance == -1) {
7019 return 1;
7020 }
7021 if (isinstance) {
7022 expr_ty exc;
7023 expr_ty cause;
7024
Victor Stinner74419f02020-07-03 11:35:37 +02007025 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007026 return 1;
7027 }
7028 if (tmp == NULL || tmp == Py_None) {
7029 Py_CLEAR(tmp);
7030 exc = NULL;
7031 }
7032 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007033 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007034 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007035 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007036 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007037 }
Victor Stinner74419f02020-07-03 11:35:37 +02007038 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007039 return 1;
7040 }
7041 if (tmp == NULL || tmp == Py_None) {
7042 Py_CLEAR(tmp);
7043 cause = NULL;
7044 }
7045 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007046 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007047 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007048 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007049 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007050 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007051 *out = _PyAST_Raise(exc, cause, lineno, col_offset, end_lineno,
7052 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007053 if (*out == NULL) goto failed;
7054 return 0;
7055 }
Victor Stinner74419f02020-07-03 11:35:37 +02007056 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007057 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007058 if (isinstance == -1) {
7059 return 1;
7060 }
7061 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007062 asdl_stmt_seq* body;
7063 asdl_excepthandler_seq* handlers;
7064 asdl_stmt_seq* orelse;
7065 asdl_stmt_seq* finalbody;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007066
Victor Stinner74419f02020-07-03 11:35:37 +02007067 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007068 return 1;
7069 }
7070 if (tmp == NULL) {
7071 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
7072 return 1;
7073 }
7074 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007075 int res;
7076 Py_ssize_t len;
7077 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007078 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007079 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 +02007080 goto failed;
7081 }
7082 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007083 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007084 if (body == NULL) goto failed;
7085 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007086 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007087 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7088 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007089 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007090 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007091 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007092 if (len != PyList_GET_SIZE(tmp)) {
7093 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
7094 goto failed;
7095 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007096 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007097 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007098 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007099 }
Victor Stinner74419f02020-07-03 11:35:37 +02007100 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007101 return 1;
7102 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007103 if (tmp == NULL) {
7104 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
7105 return 1;
7106 }
7107 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007108 int res;
7109 Py_ssize_t len;
7110 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007111 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007112 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 +02007113 goto failed;
7114 }
7115 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007116 handlers = _Py_asdl_excepthandler_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007117 if (handlers == NULL) goto failed;
7118 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007119 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007120 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7121 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007122 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007123 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007124 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007125 if (len != PyList_GET_SIZE(tmp)) {
7126 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
7127 goto failed;
7128 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007129 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007130 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007131 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007132 }
Victor Stinner74419f02020-07-03 11:35:37 +02007133 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007134 return 1;
7135 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007136 if (tmp == NULL) {
7137 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
7138 return 1;
7139 }
7140 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007141 int res;
7142 Py_ssize_t len;
7143 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007144 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007145 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 +02007146 goto failed;
7147 }
7148 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007149 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007150 if (orelse == NULL) goto failed;
7151 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007152 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007153 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7154 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007155 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007156 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007157 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007158 if (len != PyList_GET_SIZE(tmp)) {
7159 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
7160 goto failed;
7161 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007162 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007163 }
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->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007167 return 1;
7168 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007169 if (tmp == NULL) {
7170 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
7171 return 1;
7172 }
7173 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007174 int res;
7175 Py_ssize_t len;
7176 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007177 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007178 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 +02007179 goto failed;
7180 }
7181 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007182 finalbody = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007183 if (finalbody == NULL) goto failed;
7184 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007185 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007186 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7187 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007188 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007189 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007190 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007191 if (len != PyList_GET_SIZE(tmp)) {
7192 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
7193 goto failed;
7194 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007195 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007196 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007197 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007198 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007199 *out = _PyAST_Try(body, handlers, orelse, finalbody, lineno,
7200 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007201 if (*out == NULL) goto failed;
7202 return 0;
7203 }
Victor Stinner74419f02020-07-03 11:35:37 +02007204 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007205 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007206 if (isinstance == -1) {
7207 return 1;
7208 }
7209 if (isinstance) {
7210 expr_ty test;
7211 expr_ty msg;
7212
Victor Stinner74419f02020-07-03 11:35:37 +02007213 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007214 return 1;
7215 }
7216 if (tmp == NULL) {
7217 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
7218 return 1;
7219 }
7220 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007221 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007222 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007223 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007224 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007225 }
Victor Stinner74419f02020-07-03 11:35:37 +02007226 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007227 return 1;
7228 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007229 if (tmp == NULL || tmp == Py_None) {
7230 Py_CLEAR(tmp);
7231 msg = NULL;
7232 }
7233 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007234 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007235 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007236 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007237 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007238 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007239 *out = _PyAST_Assert(test, msg, lineno, col_offset, end_lineno,
7240 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007241 if (*out == NULL) goto failed;
7242 return 0;
7243 }
Victor Stinner74419f02020-07-03 11:35:37 +02007244 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007245 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007246 if (isinstance == -1) {
7247 return 1;
7248 }
7249 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007250 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007251
Victor Stinner74419f02020-07-03 11:35:37 +02007252 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007253 return 1;
7254 }
7255 if (tmp == NULL) {
7256 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
7257 return 1;
7258 }
7259 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007260 int res;
7261 Py_ssize_t len;
7262 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007263 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007264 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 +02007265 goto failed;
7266 }
7267 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007268 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007269 if (names == NULL) goto failed;
7270 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007271 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007272 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7273 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007274 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007275 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007276 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007277 if (len != PyList_GET_SIZE(tmp)) {
7278 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
7279 goto failed;
7280 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007281 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007282 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007283 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007284 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007285 *out = _PyAST_Import(names, lineno, col_offset, end_lineno,
7286 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007287 if (*out == NULL) goto failed;
7288 return 0;
7289 }
Victor Stinner74419f02020-07-03 11:35:37 +02007290 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007291 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007292 if (isinstance == -1) {
7293 return 1;
7294 }
7295 if (isinstance) {
7296 identifier module;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007297 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007298 int level;
7299
Victor Stinner74419f02020-07-03 11:35:37 +02007300 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007301 return 1;
7302 }
7303 if (tmp == NULL || tmp == Py_None) {
7304 Py_CLEAR(tmp);
7305 module = NULL;
7306 }
7307 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007308 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007309 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007310 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007311 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007312 }
Victor Stinner74419f02020-07-03 11:35:37 +02007313 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007314 return 1;
7315 }
7316 if (tmp == NULL) {
7317 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
7318 return 1;
7319 }
7320 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007321 int res;
7322 Py_ssize_t len;
7323 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007324 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007325 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 +02007326 goto failed;
7327 }
7328 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007329 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007330 if (names == NULL) goto failed;
7331 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007332 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007333 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7334 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007335 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007336 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007337 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007338 if (len != PyList_GET_SIZE(tmp)) {
7339 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
7340 goto failed;
7341 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007342 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007343 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007344 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007345 }
Victor Stinner74419f02020-07-03 11:35:37 +02007346 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007347 return 1;
7348 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007349 if (tmp == NULL || tmp == Py_None) {
7350 Py_CLEAR(tmp);
7351 level = 0;
7352 }
7353 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007354 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007355 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007356 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007357 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007358 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007359 *out = _PyAST_ImportFrom(module, names, level, lineno, col_offset,
7360 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007361 if (*out == NULL) goto failed;
7362 return 0;
7363 }
Victor Stinner74419f02020-07-03 11:35:37 +02007364 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007365 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007366 if (isinstance == -1) {
7367 return 1;
7368 }
7369 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007370 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007371
Victor Stinner74419f02020-07-03 11:35:37 +02007372 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007373 return 1;
7374 }
7375 if (tmp == NULL) {
7376 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
7377 return 1;
7378 }
7379 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007380 int res;
7381 Py_ssize_t len;
7382 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007383 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007384 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 +02007385 goto failed;
7386 }
7387 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007388 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007389 if (names == NULL) goto failed;
7390 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007391 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007392 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7393 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007394 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007395 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007396 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007397 if (len != PyList_GET_SIZE(tmp)) {
7398 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
7399 goto failed;
7400 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007401 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007402 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007403 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007404 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007405 *out = _PyAST_Global(names, lineno, col_offset, end_lineno,
7406 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007407 if (*out == NULL) goto failed;
7408 return 0;
7409 }
Victor Stinner74419f02020-07-03 11:35:37 +02007410 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007411 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007412 if (isinstance == -1) {
7413 return 1;
7414 }
7415 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007416 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007417
Victor Stinner74419f02020-07-03 11:35:37 +02007418 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007419 return 1;
7420 }
7421 if (tmp == NULL) {
7422 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
7423 return 1;
7424 }
7425 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007426 int res;
7427 Py_ssize_t len;
7428 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007429 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007430 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 +02007431 goto failed;
7432 }
7433 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007434 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007435 if (names == NULL) goto failed;
7436 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007437 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007438 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7439 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007440 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007441 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007442 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007443 if (len != PyList_GET_SIZE(tmp)) {
7444 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
7445 goto failed;
7446 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007447 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007448 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007449 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007450 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007451 *out = _PyAST_Nonlocal(names, lineno, col_offset, end_lineno,
7452 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007453 if (*out == NULL) goto failed;
7454 return 0;
7455 }
Victor Stinner74419f02020-07-03 11:35:37 +02007456 tp = state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007457 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007458 if (isinstance == -1) {
7459 return 1;
7460 }
7461 if (isinstance) {
7462 expr_ty value;
7463
Victor Stinner74419f02020-07-03 11:35:37 +02007464 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007465 return 1;
7466 }
7467 if (tmp == NULL) {
7468 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
7469 return 1;
7470 }
7471 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007472 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007473 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007474 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007475 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007476 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007477 *out = _PyAST_Expr(value, lineno, col_offset, end_lineno,
7478 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007479 if (*out == NULL) goto failed;
7480 return 0;
7481 }
Victor Stinner74419f02020-07-03 11:35:37 +02007482 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007483 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007484 if (isinstance == -1) {
7485 return 1;
7486 }
7487 if (isinstance) {
7488
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007489 *out = _PyAST_Pass(lineno, col_offset, end_lineno, end_col_offset,
7490 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007491 if (*out == NULL) goto failed;
7492 return 0;
7493 }
Victor Stinner74419f02020-07-03 11:35:37 +02007494 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007495 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007496 if (isinstance == -1) {
7497 return 1;
7498 }
7499 if (isinstance) {
7500
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007501 *out = _PyAST_Break(lineno, col_offset, end_lineno, end_col_offset,
7502 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007503 if (*out == NULL) goto failed;
7504 return 0;
7505 }
Victor Stinner74419f02020-07-03 11:35:37 +02007506 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007507 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007508 if (isinstance == -1) {
7509 return 1;
7510 }
7511 if (isinstance) {
7512
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007513 *out = _PyAST_Continue(lineno, col_offset, end_lineno, end_col_offset,
7514 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007515 if (*out == NULL) goto failed;
7516 return 0;
7517 }
7518
7519 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7520 failed:
7521 Py_XDECREF(tmp);
7522 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007523}
7524
7525int
Victor Stinner5cf47822020-11-02 22:03:28 +01007526obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
7527 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007528{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007529 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007530
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007531 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007532 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007533 int lineno;
7534 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007535 int end_lineno;
7536 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007537
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007538 if (obj == Py_None) {
7539 *out = NULL;
7540 return 0;
7541 }
Victor Stinner74419f02020-07-03 11:35:37 +02007542 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007543 return 1;
7544 }
7545 if (tmp == NULL) {
7546 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7547 return 1;
7548 }
7549 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007550 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007551 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007552 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007553 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007554 }
Victor Stinner74419f02020-07-03 11:35:37 +02007555 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007556 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007557 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007558 if (tmp == NULL) {
7559 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7560 return 1;
7561 }
7562 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007563 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007564 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007565 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007566 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007567 }
Victor Stinner74419f02020-07-03 11:35:37 +02007568 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007569 return 1;
7570 }
7571 if (tmp == NULL || tmp == Py_None) {
7572 Py_CLEAR(tmp);
7573 end_lineno = 0;
7574 }
7575 else {
7576 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007577 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007578 if (res != 0) goto failed;
7579 Py_CLEAR(tmp);
7580 }
Victor Stinner74419f02020-07-03 11:35:37 +02007581 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007582 return 1;
7583 }
7584 if (tmp == NULL || tmp == Py_None) {
7585 Py_CLEAR(tmp);
7586 end_col_offset = 0;
7587 }
7588 else {
7589 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007590 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007591 if (res != 0) goto failed;
7592 Py_CLEAR(tmp);
7593 }
Victor Stinner74419f02020-07-03 11:35:37 +02007594 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007595 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007596 if (isinstance == -1) {
7597 return 1;
7598 }
7599 if (isinstance) {
7600 boolop_ty op;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007601 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007602
Victor Stinner74419f02020-07-03 11:35:37 +02007603 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007604 return 1;
7605 }
7606 if (tmp == NULL) {
7607 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7608 return 1;
7609 }
7610 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007611 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007612 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007613 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007614 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007615 }
Victor Stinner74419f02020-07-03 11:35:37 +02007616 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007617 return 1;
7618 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007619 if (tmp == NULL) {
7620 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7621 return 1;
7622 }
7623 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007624 int res;
7625 Py_ssize_t len;
7626 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007627 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007628 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 +02007629 goto failed;
7630 }
7631 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007632 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007633 if (values == NULL) goto failed;
7634 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007635 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007636 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7637 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007638 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007639 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007640 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007641 if (len != PyList_GET_SIZE(tmp)) {
7642 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7643 goto failed;
7644 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007645 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007646 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007647 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007648 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007649 *out = _PyAST_BoolOp(op, values, lineno, col_offset, end_lineno,
7650 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007651 if (*out == NULL) goto failed;
7652 return 0;
7653 }
Victor Stinner74419f02020-07-03 11:35:37 +02007654 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007655 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007656 if (isinstance == -1) {
7657 return 1;
7658 }
7659 if (isinstance) {
7660 expr_ty target;
7661 expr_ty value;
7662
Victor Stinner74419f02020-07-03 11:35:37 +02007663 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007664 return 1;
7665 }
7666 if (tmp == NULL) {
7667 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7668 return 1;
7669 }
7670 else {
7671 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007672 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007673 if (res != 0) goto failed;
7674 Py_CLEAR(tmp);
7675 }
Victor Stinner74419f02020-07-03 11:35:37 +02007676 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007677 return 1;
7678 }
7679 if (tmp == NULL) {
7680 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7681 return 1;
7682 }
7683 else {
7684 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007685 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007686 if (res != 0) goto failed;
7687 Py_CLEAR(tmp);
7688 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007689 *out = _PyAST_NamedExpr(target, value, lineno, col_offset, end_lineno,
7690 end_col_offset, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007691 if (*out == NULL) goto failed;
7692 return 0;
7693 }
Victor Stinner74419f02020-07-03 11:35:37 +02007694 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007695 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007696 if (isinstance == -1) {
7697 return 1;
7698 }
7699 if (isinstance) {
7700 expr_ty left;
7701 operator_ty op;
7702 expr_ty right;
7703
Victor Stinner74419f02020-07-03 11:35:37 +02007704 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007705 return 1;
7706 }
7707 if (tmp == NULL) {
7708 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7709 return 1;
7710 }
7711 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007712 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007713 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007714 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007715 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007716 }
Victor Stinner74419f02020-07-03 11:35:37 +02007717 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007718 return 1;
7719 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007720 if (tmp == NULL) {
7721 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7722 return 1;
7723 }
7724 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007725 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007726 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007727 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007728 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007729 }
Victor Stinner74419f02020-07-03 11:35:37 +02007730 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007731 return 1;
7732 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007733 if (tmp == NULL) {
7734 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7735 return 1;
7736 }
7737 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007738 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007739 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007740 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007741 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007742 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007743 *out = _PyAST_BinOp(left, op, right, lineno, col_offset, end_lineno,
7744 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007745 if (*out == NULL) goto failed;
7746 return 0;
7747 }
Victor Stinner74419f02020-07-03 11:35:37 +02007748 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007749 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007750 if (isinstance == -1) {
7751 return 1;
7752 }
7753 if (isinstance) {
7754 unaryop_ty op;
7755 expr_ty operand;
7756
Victor Stinner74419f02020-07-03 11:35:37 +02007757 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007758 return 1;
7759 }
7760 if (tmp == NULL) {
7761 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7762 return 1;
7763 }
7764 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007765 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007766 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007767 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007768 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007769 }
Victor Stinner74419f02020-07-03 11:35:37 +02007770 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007771 return 1;
7772 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007773 if (tmp == NULL) {
7774 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7775 return 1;
7776 }
7777 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007778 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007779 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007780 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007781 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007782 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007783 *out = _PyAST_UnaryOp(op, operand, lineno, col_offset, end_lineno,
7784 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007785 if (*out == NULL) goto failed;
7786 return 0;
7787 }
Victor Stinner74419f02020-07-03 11:35:37 +02007788 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007789 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007790 if (isinstance == -1) {
7791 return 1;
7792 }
7793 if (isinstance) {
7794 arguments_ty args;
7795 expr_ty body;
7796
Victor Stinner74419f02020-07-03 11:35:37 +02007797 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007798 return 1;
7799 }
7800 if (tmp == NULL) {
7801 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7802 return 1;
7803 }
7804 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007805 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007806 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007807 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007808 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007809 }
Victor Stinner74419f02020-07-03 11:35:37 +02007810 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007811 return 1;
7812 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007813 if (tmp == NULL) {
7814 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7815 return 1;
7816 }
7817 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007818 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007819 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007820 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007821 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007822 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007823 *out = _PyAST_Lambda(args, body, lineno, col_offset, end_lineno,
7824 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007825 if (*out == NULL) goto failed;
7826 return 0;
7827 }
Victor Stinner74419f02020-07-03 11:35:37 +02007828 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007829 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007830 if (isinstance == -1) {
7831 return 1;
7832 }
7833 if (isinstance) {
7834 expr_ty test;
7835 expr_ty body;
7836 expr_ty orelse;
7837
Victor Stinner74419f02020-07-03 11:35:37 +02007838 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007839 return 1;
7840 }
7841 if (tmp == NULL) {
7842 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7843 return 1;
7844 }
7845 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007846 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007847 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007848 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007849 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007850 }
Victor Stinner74419f02020-07-03 11:35:37 +02007851 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007852 return 1;
7853 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007854 if (tmp == NULL) {
7855 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7856 return 1;
7857 }
7858 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007859 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007860 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007861 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007862 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007863 }
Victor Stinner74419f02020-07-03 11:35:37 +02007864 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007865 return 1;
7866 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007867 if (tmp == NULL) {
7868 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7869 return 1;
7870 }
7871 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007872 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007873 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007874 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007875 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007876 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007877 *out = _PyAST_IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7878 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007879 if (*out == NULL) goto failed;
7880 return 0;
7881 }
Victor Stinner74419f02020-07-03 11:35:37 +02007882 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007883 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007884 if (isinstance == -1) {
7885 return 1;
7886 }
7887 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007888 asdl_expr_seq* keys;
7889 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007890
Victor Stinner74419f02020-07-03 11:35:37 +02007891 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007892 return 1;
7893 }
7894 if (tmp == NULL) {
7895 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7896 return 1;
7897 }
7898 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007899 int res;
7900 Py_ssize_t len;
7901 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007902 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007903 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 +02007904 goto failed;
7905 }
7906 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007907 keys = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007908 if (keys == NULL) goto failed;
7909 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007910 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007911 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7912 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007913 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007914 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007915 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007916 if (len != PyList_GET_SIZE(tmp)) {
7917 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7918 goto failed;
7919 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007920 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007921 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007922 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007923 }
Victor Stinner74419f02020-07-03 11:35:37 +02007924 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007925 return 1;
7926 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007927 if (tmp == NULL) {
7928 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7929 return 1;
7930 }
7931 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007932 int res;
7933 Py_ssize_t len;
7934 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007935 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007936 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 +02007937 goto failed;
7938 }
7939 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007940 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007941 if (values == NULL) goto failed;
7942 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007943 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007944 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7945 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007946 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007947 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007948 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007949 if (len != PyList_GET_SIZE(tmp)) {
7950 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7951 goto failed;
7952 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007953 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007954 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007955 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007956 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007957 *out = _PyAST_Dict(keys, values, lineno, col_offset, end_lineno,
7958 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007959 if (*out == NULL) goto failed;
7960 return 0;
7961 }
Victor Stinner74419f02020-07-03 11:35:37 +02007962 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007963 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007964 if (isinstance == -1) {
7965 return 1;
7966 }
7967 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007968 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007969
Victor Stinner74419f02020-07-03 11:35:37 +02007970 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007971 return 1;
7972 }
7973 if (tmp == NULL) {
7974 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7975 return 1;
7976 }
7977 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007978 int res;
7979 Py_ssize_t len;
7980 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007981 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007982 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 +02007983 goto failed;
7984 }
7985 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007986 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007987 if (elts == NULL) goto failed;
7988 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007989 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007990 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7991 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007992 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007993 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007994 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007995 if (len != PyList_GET_SIZE(tmp)) {
7996 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7997 goto failed;
7998 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007999 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008000 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008001 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008002 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008003 *out = _PyAST_Set(elts, lineno, col_offset, end_lineno, end_col_offset,
8004 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008005 if (*out == NULL) goto failed;
8006 return 0;
8007 }
Victor Stinner74419f02020-07-03 11:35:37 +02008008 tp = state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008009 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008010 if (isinstance == -1) {
8011 return 1;
8012 }
8013 if (isinstance) {
8014 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008015 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008016
Victor Stinner74419f02020-07-03 11:35:37 +02008017 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008018 return 1;
8019 }
8020 if (tmp == NULL) {
8021 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
8022 return 1;
8023 }
8024 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008025 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008026 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008027 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008028 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008029 }
Victor Stinner74419f02020-07-03 11:35:37 +02008030 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008031 return 1;
8032 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008033 if (tmp == NULL) {
8034 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
8035 return 1;
8036 }
8037 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008038 int res;
8039 Py_ssize_t len;
8040 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008041 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008042 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 +02008043 goto failed;
8044 }
8045 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008046 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008047 if (generators == NULL) goto failed;
8048 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008049 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008050 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8051 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008052 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008053 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008054 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008055 if (len != PyList_GET_SIZE(tmp)) {
8056 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
8057 goto failed;
8058 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008059 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008060 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008061 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008062 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008063 *out = _PyAST_ListComp(elt, generators, lineno, col_offset, end_lineno,
8064 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008065 if (*out == NULL) goto failed;
8066 return 0;
8067 }
Victor Stinner74419f02020-07-03 11:35:37 +02008068 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008069 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008070 if (isinstance == -1) {
8071 return 1;
8072 }
8073 if (isinstance) {
8074 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008075 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008076
Victor Stinner74419f02020-07-03 11:35:37 +02008077 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008078 return 1;
8079 }
8080 if (tmp == NULL) {
8081 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
8082 return 1;
8083 }
8084 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008085 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008086 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008087 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008088 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008089 }
Victor Stinner74419f02020-07-03 11:35:37 +02008090 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008091 return 1;
8092 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008093 if (tmp == NULL) {
8094 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
8095 return 1;
8096 }
8097 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008098 int res;
8099 Py_ssize_t len;
8100 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008101 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008102 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 +02008103 goto failed;
8104 }
8105 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008106 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008107 if (generators == NULL) goto failed;
8108 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008109 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008110 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8111 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008112 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008113 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008114 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008115 if (len != PyList_GET_SIZE(tmp)) {
8116 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
8117 goto failed;
8118 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008119 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008120 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008121 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008122 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008123 *out = _PyAST_SetComp(elt, generators, lineno, col_offset, end_lineno,
8124 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008125 if (*out == NULL) goto failed;
8126 return 0;
8127 }
Victor Stinner74419f02020-07-03 11:35:37 +02008128 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008129 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008130 if (isinstance == -1) {
8131 return 1;
8132 }
8133 if (isinstance) {
8134 expr_ty key;
8135 expr_ty value;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008136 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008137
Victor Stinner74419f02020-07-03 11:35:37 +02008138 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008139 return 1;
8140 }
8141 if (tmp == NULL) {
8142 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
8143 return 1;
8144 }
8145 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008146 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008147 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008148 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008149 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008150 }
Victor Stinner74419f02020-07-03 11:35:37 +02008151 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008152 return 1;
8153 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008154 if (tmp == NULL) {
8155 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
8156 return 1;
8157 }
8158 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008159 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008160 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008161 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008162 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008163 }
Victor Stinner74419f02020-07-03 11:35:37 +02008164 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008165 return 1;
8166 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008167 if (tmp == NULL) {
8168 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
8169 return 1;
8170 }
8171 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008172 int res;
8173 Py_ssize_t len;
8174 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008175 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008176 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 +02008177 goto failed;
8178 }
8179 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008180 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008181 if (generators == NULL) goto failed;
8182 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008183 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008184 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8185 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008186 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008187 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008188 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008189 if (len != PyList_GET_SIZE(tmp)) {
8190 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
8191 goto failed;
8192 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008193 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008194 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008195 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008196 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008197 *out = _PyAST_DictComp(key, value, generators, lineno, col_offset,
8198 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008199 if (*out == NULL) goto failed;
8200 return 0;
8201 }
Victor Stinner74419f02020-07-03 11:35:37 +02008202 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008203 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008204 if (isinstance == -1) {
8205 return 1;
8206 }
8207 if (isinstance) {
8208 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008209 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008210
Victor Stinner74419f02020-07-03 11:35:37 +02008211 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008212 return 1;
8213 }
8214 if (tmp == NULL) {
8215 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
8216 return 1;
8217 }
8218 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008219 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008220 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008221 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008222 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008223 }
Victor Stinner74419f02020-07-03 11:35:37 +02008224 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008225 return 1;
8226 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008227 if (tmp == NULL) {
8228 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
8229 return 1;
8230 }
8231 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008232 int res;
8233 Py_ssize_t len;
8234 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008235 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008236 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 +02008237 goto failed;
8238 }
8239 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008240 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008241 if (generators == NULL) goto failed;
8242 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008243 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008244 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8245 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008246 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008247 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008248 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008249 if (len != PyList_GET_SIZE(tmp)) {
8250 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
8251 goto failed;
8252 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008253 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008254 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008255 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008256 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008257 *out = _PyAST_GeneratorExp(elt, generators, lineno, col_offset,
8258 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008259 if (*out == NULL) goto failed;
8260 return 0;
8261 }
Victor Stinner74419f02020-07-03 11:35:37 +02008262 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008263 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04008264 if (isinstance == -1) {
8265 return 1;
8266 }
8267 if (isinstance) {
8268 expr_ty value;
8269
Victor Stinner74419f02020-07-03 11:35:37 +02008270 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008271 return 1;
8272 }
8273 if (tmp == NULL) {
8274 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
8275 return 1;
8276 }
8277 else {
Yury Selivanov75445082015-05-11 22:57:16 -04008278 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008279 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04008280 if (res != 0) goto failed;
8281 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04008282 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008283 *out = _PyAST_Await(value, lineno, col_offset, end_lineno,
8284 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04008285 if (*out == NULL) goto failed;
8286 return 0;
8287 }
Victor Stinner74419f02020-07-03 11:35:37 +02008288 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008289 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008290 if (isinstance == -1) {
8291 return 1;
8292 }
8293 if (isinstance) {
8294 expr_ty value;
8295
Victor Stinner74419f02020-07-03 11:35:37 +02008296 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008297 return 1;
8298 }
8299 if (tmp == NULL || tmp == Py_None) {
8300 Py_CLEAR(tmp);
8301 value = NULL;
8302 }
8303 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008304 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008305 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008306 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008307 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008308 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008309 *out = _PyAST_Yield(value, lineno, col_offset, end_lineno,
8310 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008311 if (*out == NULL) goto failed;
8312 return 0;
8313 }
Victor Stinner74419f02020-07-03 11:35:37 +02008314 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008315 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008316 if (isinstance == -1) {
8317 return 1;
8318 }
8319 if (isinstance) {
8320 expr_ty value;
8321
Victor Stinner74419f02020-07-03 11:35:37 +02008322 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008323 return 1;
8324 }
8325 if (tmp == NULL) {
8326 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
8327 return 1;
8328 }
8329 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008330 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008331 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008332 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008333 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008334 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008335 *out = _PyAST_YieldFrom(value, lineno, col_offset, end_lineno,
8336 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008337 if (*out == NULL) goto failed;
8338 return 0;
8339 }
Victor Stinner74419f02020-07-03 11:35:37 +02008340 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008341 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008342 if (isinstance == -1) {
8343 return 1;
8344 }
8345 if (isinstance) {
8346 expr_ty left;
8347 asdl_int_seq* ops;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008348 asdl_expr_seq* comparators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008349
Victor Stinner74419f02020-07-03 11:35:37 +02008350 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008351 return 1;
8352 }
8353 if (tmp == NULL) {
8354 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
8355 return 1;
8356 }
8357 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008358 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008359 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008360 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008361 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008362 }
Victor Stinner74419f02020-07-03 11:35:37 +02008363 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008364 return 1;
8365 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008366 if (tmp == NULL) {
8367 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
8368 return 1;
8369 }
8370 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008371 int res;
8372 Py_ssize_t len;
8373 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008374 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008375 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 +02008376 goto failed;
8377 }
8378 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008379 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008380 if (ops == NULL) goto failed;
8381 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008382 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008383 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8384 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008385 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008386 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008387 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008388 if (len != PyList_GET_SIZE(tmp)) {
8389 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
8390 goto failed;
8391 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008392 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008393 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008394 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008395 }
Victor Stinner74419f02020-07-03 11:35:37 +02008396 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008397 return 1;
8398 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008399 if (tmp == NULL) {
8400 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
8401 return 1;
8402 }
8403 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008404 int res;
8405 Py_ssize_t len;
8406 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008407 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008408 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 +02008409 goto failed;
8410 }
8411 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008412 comparators = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008413 if (comparators == NULL) goto failed;
8414 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008415 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008416 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8417 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008418 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008419 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008420 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008421 if (len != PyList_GET_SIZE(tmp)) {
8422 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
8423 goto failed;
8424 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008425 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008426 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008427 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008428 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008429 *out = _PyAST_Compare(left, ops, comparators, lineno, col_offset,
8430 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008431 if (*out == NULL) goto failed;
8432 return 0;
8433 }
Victor Stinner74419f02020-07-03 11:35:37 +02008434 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008435 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008436 if (isinstance == -1) {
8437 return 1;
8438 }
8439 if (isinstance) {
8440 expr_ty func;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008441 asdl_expr_seq* args;
8442 asdl_keyword_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008443
Victor Stinner74419f02020-07-03 11:35:37 +02008444 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008445 return 1;
8446 }
8447 if (tmp == NULL) {
8448 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
8449 return 1;
8450 }
8451 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008452 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008453 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008454 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008455 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008456 }
Victor Stinner74419f02020-07-03 11:35:37 +02008457 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008458 return 1;
8459 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008460 if (tmp == NULL) {
8461 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
8462 return 1;
8463 }
8464 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008465 int res;
8466 Py_ssize_t len;
8467 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008468 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008469 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 +02008470 goto failed;
8471 }
8472 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008473 args = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008474 if (args == NULL) goto failed;
8475 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008476 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008477 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8478 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008479 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008480 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008481 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008482 if (len != PyList_GET_SIZE(tmp)) {
8483 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
8484 goto failed;
8485 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008486 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008487 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008488 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008489 }
Victor Stinner74419f02020-07-03 11:35:37 +02008490 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008491 return 1;
8492 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008493 if (tmp == NULL) {
8494 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
8495 return 1;
8496 }
8497 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008498 int res;
8499 Py_ssize_t len;
8500 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008501 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008502 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008503 goto failed;
8504 }
8505 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008506 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008507 if (keywords == NULL) goto failed;
8508 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008509 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008510 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8511 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008512 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008513 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008514 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008515 if (len != PyList_GET_SIZE(tmp)) {
8516 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
8517 goto failed;
8518 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008519 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008520 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008521 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008522 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008523 *out = _PyAST_Call(func, args, keywords, lineno, col_offset,
8524 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008525 if (*out == NULL) goto failed;
8526 return 0;
8527 }
Victor Stinner74419f02020-07-03 11:35:37 +02008528 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008529 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008530 if (isinstance == -1) {
8531 return 1;
8532 }
8533 if (isinstance) {
8534 expr_ty value;
8535 int conversion;
8536 expr_ty format_spec;
8537
Victor Stinner74419f02020-07-03 11:35:37 +02008538 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008539 return 1;
8540 }
8541 if (tmp == NULL) {
8542 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8543 return 1;
8544 }
8545 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008546 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008547 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008548 if (res != 0) goto failed;
8549 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008550 }
Victor Stinner74419f02020-07-03 11:35:37 +02008551 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008552 return 1;
8553 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008554 if (tmp == NULL || tmp == Py_None) {
8555 Py_CLEAR(tmp);
8556 conversion = 0;
8557 }
8558 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008559 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008560 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008561 if (res != 0) goto failed;
8562 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008563 }
Victor Stinner74419f02020-07-03 11:35:37 +02008564 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008565 return 1;
8566 }
8567 if (tmp == NULL || tmp == Py_None) {
8568 Py_CLEAR(tmp);
8569 format_spec = NULL;
8570 }
8571 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008572 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008573 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008574 if (res != 0) goto failed;
8575 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008576 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008577 *out = _PyAST_FormattedValue(value, conversion, format_spec, lineno,
8578 col_offset, end_lineno, end_col_offset,
8579 arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008580 if (*out == NULL) goto failed;
8581 return 0;
8582 }
Victor Stinner74419f02020-07-03 11:35:37 +02008583 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008584 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008585 if (isinstance == -1) {
8586 return 1;
8587 }
8588 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008589 asdl_expr_seq* values;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008590
Victor Stinner74419f02020-07-03 11:35:37 +02008591 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008592 return 1;
8593 }
8594 if (tmp == NULL) {
8595 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8596 return 1;
8597 }
8598 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008599 int res;
8600 Py_ssize_t len;
8601 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008602 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008603 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 -04008604 goto failed;
8605 }
8606 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008607 values = _Py_asdl_expr_seq_new(len, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008608 if (values == NULL) goto failed;
8609 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008610 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008611 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8612 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008613 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008614 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008615 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008616 if (len != PyList_GET_SIZE(tmp)) {
8617 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8618 goto failed;
8619 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008620 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008621 }
8622 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008623 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008624 *out = _PyAST_JoinedStr(values, lineno, col_offset, end_lineno,
8625 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008626 if (*out == NULL) goto failed;
8627 return 0;
8628 }
Victor Stinner74419f02020-07-03 11:35:37 +02008629 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008630 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008631 if (isinstance == -1) {
8632 return 1;
8633 }
8634 if (isinstance) {
8635 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008636 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008637
Victor Stinner74419f02020-07-03 11:35:37 +02008638 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008639 return 1;
8640 }
8641 if (tmp == NULL) {
8642 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8643 return 1;
8644 }
8645 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008646 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008647 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008648 if (res != 0) goto failed;
8649 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008650 }
Victor Stinner74419f02020-07-03 11:35:37 +02008651 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008652 return 1;
8653 }
8654 if (tmp == NULL || tmp == Py_None) {
8655 Py_CLEAR(tmp);
8656 kind = NULL;
8657 }
8658 else {
8659 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008660 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008661 if (res != 0) goto failed;
8662 Py_CLEAR(tmp);
8663 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008664 *out = _PyAST_Constant(value, kind, lineno, col_offset, end_lineno,
8665 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008666 if (*out == NULL) goto failed;
8667 return 0;
8668 }
Victor Stinner74419f02020-07-03 11:35:37 +02008669 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008670 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008671 if (isinstance == -1) {
8672 return 1;
8673 }
8674 if (isinstance) {
8675 expr_ty value;
8676 identifier attr;
8677 expr_context_ty ctx;
8678
Victor Stinner74419f02020-07-03 11:35:37 +02008679 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008680 return 1;
8681 }
8682 if (tmp == NULL) {
8683 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8684 return 1;
8685 }
8686 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008687 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008688 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008689 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008690 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008691 }
Victor Stinner74419f02020-07-03 11:35:37 +02008692 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008693 return 1;
8694 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008695 if (tmp == NULL) {
8696 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8697 return 1;
8698 }
8699 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008700 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008701 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008702 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008703 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008704 }
Victor Stinner74419f02020-07-03 11:35:37 +02008705 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008706 return 1;
8707 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008708 if (tmp == NULL) {
8709 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8710 return 1;
8711 }
8712 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008713 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008714 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008715 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008716 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008717 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008718 *out = _PyAST_Attribute(value, attr, ctx, lineno, col_offset,
8719 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008720 if (*out == NULL) goto failed;
8721 return 0;
8722 }
Victor Stinner74419f02020-07-03 11:35:37 +02008723 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008724 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008725 if (isinstance == -1) {
8726 return 1;
8727 }
8728 if (isinstance) {
8729 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008730 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008731 expr_context_ty ctx;
8732
Victor Stinner74419f02020-07-03 11:35:37 +02008733 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008734 return 1;
8735 }
8736 if (tmp == NULL) {
8737 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8738 return 1;
8739 }
8740 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008741 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008742 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008743 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008744 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008745 }
Victor Stinner74419f02020-07-03 11:35:37 +02008746 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008747 return 1;
8748 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008749 if (tmp == NULL) {
8750 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8751 return 1;
8752 }
8753 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008754 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008755 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008756 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008757 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008758 }
Victor Stinner74419f02020-07-03 11:35:37 +02008759 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008760 return 1;
8761 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008762 if (tmp == NULL) {
8763 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8764 return 1;
8765 }
8766 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008767 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008768 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008769 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008770 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008771 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008772 *out = _PyAST_Subscript(value, slice, ctx, lineno, col_offset,
8773 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008774 if (*out == NULL) goto failed;
8775 return 0;
8776 }
Victor Stinner74419f02020-07-03 11:35:37 +02008777 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008778 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008779 if (isinstance == -1) {
8780 return 1;
8781 }
8782 if (isinstance) {
8783 expr_ty value;
8784 expr_context_ty ctx;
8785
Victor Stinner74419f02020-07-03 11:35:37 +02008786 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008787 return 1;
8788 }
8789 if (tmp == NULL) {
8790 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8791 return 1;
8792 }
8793 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008794 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008795 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008796 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008797 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008798 }
Victor Stinner74419f02020-07-03 11:35:37 +02008799 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008800 return 1;
8801 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008802 if (tmp == NULL) {
8803 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8804 return 1;
8805 }
8806 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008807 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008808 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008809 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008810 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008811 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008812 *out = _PyAST_Starred(value, ctx, lineno, col_offset, end_lineno,
8813 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008814 if (*out == NULL) goto failed;
8815 return 0;
8816 }
Victor Stinner74419f02020-07-03 11:35:37 +02008817 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008818 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008819 if (isinstance == -1) {
8820 return 1;
8821 }
8822 if (isinstance) {
8823 identifier id;
8824 expr_context_ty ctx;
8825
Victor Stinner74419f02020-07-03 11:35:37 +02008826 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008827 return 1;
8828 }
8829 if (tmp == NULL) {
8830 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8831 return 1;
8832 }
8833 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008834 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008835 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008836 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008837 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008838 }
Victor Stinner74419f02020-07-03 11:35:37 +02008839 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008840 return 1;
8841 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008842 if (tmp == NULL) {
8843 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8844 return 1;
8845 }
8846 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008847 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008848 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008849 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008850 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008851 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008852 *out = _PyAST_Name(id, ctx, lineno, col_offset, end_lineno,
8853 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008854 if (*out == NULL) goto failed;
8855 return 0;
8856 }
Victor Stinner74419f02020-07-03 11:35:37 +02008857 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008858 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008859 if (isinstance == -1) {
8860 return 1;
8861 }
8862 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008863 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008864 expr_context_ty ctx;
8865
Victor Stinner74419f02020-07-03 11:35:37 +02008866 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008867 return 1;
8868 }
8869 if (tmp == NULL) {
8870 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8871 return 1;
8872 }
8873 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008874 int res;
8875 Py_ssize_t len;
8876 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008877 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008878 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008879 goto failed;
8880 }
8881 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008882 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008883 if (elts == NULL) goto failed;
8884 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008885 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008886 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8887 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008888 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008889 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008890 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008891 if (len != PyList_GET_SIZE(tmp)) {
8892 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8893 goto failed;
8894 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008895 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008896 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008897 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008898 }
Victor Stinner74419f02020-07-03 11:35:37 +02008899 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008900 return 1;
8901 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008902 if (tmp == NULL) {
8903 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8904 return 1;
8905 }
8906 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008907 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008908 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008909 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008910 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008911 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008912 *out = _PyAST_List(elts, ctx, lineno, col_offset, end_lineno,
8913 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008914 if (*out == NULL) goto failed;
8915 return 0;
8916 }
Victor Stinner74419f02020-07-03 11:35:37 +02008917 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008918 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008919 if (isinstance == -1) {
8920 return 1;
8921 }
8922 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008923 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008924 expr_context_ty ctx;
8925
Victor Stinner74419f02020-07-03 11:35:37 +02008926 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008927 return 1;
8928 }
8929 if (tmp == NULL) {
8930 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8931 return 1;
8932 }
8933 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008934 int res;
8935 Py_ssize_t len;
8936 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008937 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008938 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 +02008939 goto failed;
8940 }
8941 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008942 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008943 if (elts == NULL) goto failed;
8944 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008945 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008946 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8947 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008948 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008949 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008950 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008951 if (len != PyList_GET_SIZE(tmp)) {
8952 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8953 goto failed;
8954 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008955 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008956 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008957 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008958 }
Victor Stinner74419f02020-07-03 11:35:37 +02008959 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008960 return 1;
8961 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008962 if (tmp == NULL) {
8963 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8964 return 1;
8965 }
8966 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008967 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008968 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008969 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008970 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008971 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008972 *out = _PyAST_Tuple(elts, ctx, lineno, col_offset, end_lineno,
8973 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008974 if (*out == NULL) goto failed;
8975 return 0;
8976 }
Victor Stinner74419f02020-07-03 11:35:37 +02008977 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008978 isinstance = PyObject_IsInstance(obj, tp);
8979 if (isinstance == -1) {
8980 return 1;
8981 }
8982 if (isinstance) {
8983 expr_ty lower;
8984 expr_ty upper;
8985 expr_ty step;
8986
Victor Stinner74419f02020-07-03 11:35:37 +02008987 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008988 return 1;
8989 }
8990 if (tmp == NULL || tmp == Py_None) {
8991 Py_CLEAR(tmp);
8992 lower = NULL;
8993 }
8994 else {
8995 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008996 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008997 if (res != 0) goto failed;
8998 Py_CLEAR(tmp);
8999 }
Victor Stinner74419f02020-07-03 11:35:37 +02009000 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02009001 return 1;
9002 }
9003 if (tmp == NULL || tmp == Py_None) {
9004 Py_CLEAR(tmp);
9005 upper = NULL;
9006 }
9007 else {
9008 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009009 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02009010 if (res != 0) goto failed;
9011 Py_CLEAR(tmp);
9012 }
Victor Stinner74419f02020-07-03 11:35:37 +02009013 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02009014 return 1;
9015 }
9016 if (tmp == NULL || tmp == Py_None) {
9017 Py_CLEAR(tmp);
9018 step = NULL;
9019 }
9020 else {
9021 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009022 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02009023 if (res != 0) goto failed;
9024 Py_CLEAR(tmp);
9025 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009026 *out = _PyAST_Slice(lower, upper, step, lineno, col_offset, end_lineno,
9027 end_col_offset, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02009028 if (*out == NULL) goto failed;
9029 return 0;
9030 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009031
9032 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
9033 failed:
9034 Py_XDECREF(tmp);
9035 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009036}
9037
9038int
Victor Stinner5cf47822020-11-02 22:03:28 +01009039obj2ast_expr_context(struct ast_state *state, PyObject* obj, expr_context_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009040 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009041{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009042 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009043
Victor Stinner74419f02020-07-03 11:35:37 +02009044 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009045 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009046 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009047 }
9048 if (isinstance) {
9049 *out = Load;
9050 return 0;
9051 }
Victor Stinner74419f02020-07-03 11:35:37 +02009052 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009053 if (isinstance == -1) {
9054 return 1;
9055 }
9056 if (isinstance) {
9057 *out = Store;
9058 return 0;
9059 }
Victor Stinner74419f02020-07-03 11:35:37 +02009060 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009061 if (isinstance == -1) {
9062 return 1;
9063 }
9064 if (isinstance) {
9065 *out = Del;
9066 return 0;
9067 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009068
9069 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
9070 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009071}
9072
9073int
Victor Stinner5cf47822020-11-02 22:03:28 +01009074obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009075 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009076{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009077 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009078
Victor Stinner74419f02020-07-03 11:35:37 +02009079 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009080 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009081 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009082 }
9083 if (isinstance) {
9084 *out = And;
9085 return 0;
9086 }
Victor Stinner74419f02020-07-03 11:35:37 +02009087 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009088 if (isinstance == -1) {
9089 return 1;
9090 }
9091 if (isinstance) {
9092 *out = Or;
9093 return 0;
9094 }
9095
9096 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
9097 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009098}
9099
9100int
Victor Stinner5cf47822020-11-02 22:03:28 +01009101obj2ast_operator(struct ast_state *state, PyObject* obj, operator_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009102 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009103{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009104 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009105
Victor Stinner74419f02020-07-03 11:35:37 +02009106 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009107 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009108 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009109 }
9110 if (isinstance) {
9111 *out = Add;
9112 return 0;
9113 }
Victor Stinner74419f02020-07-03 11:35:37 +02009114 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009115 if (isinstance == -1) {
9116 return 1;
9117 }
9118 if (isinstance) {
9119 *out = Sub;
9120 return 0;
9121 }
Victor Stinner74419f02020-07-03 11:35:37 +02009122 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009123 if (isinstance == -1) {
9124 return 1;
9125 }
9126 if (isinstance) {
9127 *out = Mult;
9128 return 0;
9129 }
Victor Stinner74419f02020-07-03 11:35:37 +02009130 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04009131 if (isinstance == -1) {
9132 return 1;
9133 }
9134 if (isinstance) {
9135 *out = MatMult;
9136 return 0;
9137 }
Victor Stinner74419f02020-07-03 11:35:37 +02009138 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009139 if (isinstance == -1) {
9140 return 1;
9141 }
9142 if (isinstance) {
9143 *out = Div;
9144 return 0;
9145 }
Victor Stinner74419f02020-07-03 11:35:37 +02009146 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009147 if (isinstance == -1) {
9148 return 1;
9149 }
9150 if (isinstance) {
9151 *out = Mod;
9152 return 0;
9153 }
Victor Stinner74419f02020-07-03 11:35:37 +02009154 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009155 if (isinstance == -1) {
9156 return 1;
9157 }
9158 if (isinstance) {
9159 *out = Pow;
9160 return 0;
9161 }
Victor Stinner74419f02020-07-03 11:35:37 +02009162 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009163 if (isinstance == -1) {
9164 return 1;
9165 }
9166 if (isinstance) {
9167 *out = LShift;
9168 return 0;
9169 }
Victor Stinner74419f02020-07-03 11:35:37 +02009170 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009171 if (isinstance == -1) {
9172 return 1;
9173 }
9174 if (isinstance) {
9175 *out = RShift;
9176 return 0;
9177 }
Victor Stinner74419f02020-07-03 11:35:37 +02009178 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009179 if (isinstance == -1) {
9180 return 1;
9181 }
9182 if (isinstance) {
9183 *out = BitOr;
9184 return 0;
9185 }
Victor Stinner74419f02020-07-03 11:35:37 +02009186 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009187 if (isinstance == -1) {
9188 return 1;
9189 }
9190 if (isinstance) {
9191 *out = BitXor;
9192 return 0;
9193 }
Victor Stinner74419f02020-07-03 11:35:37 +02009194 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009195 if (isinstance == -1) {
9196 return 1;
9197 }
9198 if (isinstance) {
9199 *out = BitAnd;
9200 return 0;
9201 }
Victor Stinner74419f02020-07-03 11:35:37 +02009202 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009203 if (isinstance == -1) {
9204 return 1;
9205 }
9206 if (isinstance) {
9207 *out = FloorDiv;
9208 return 0;
9209 }
9210
9211 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
9212 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009213}
9214
9215int
Victor Stinner5cf47822020-11-02 22:03:28 +01009216obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* out,
9217 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009218{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009219 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009220
Victor Stinner74419f02020-07-03 11:35:37 +02009221 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009222 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009223 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009224 }
9225 if (isinstance) {
9226 *out = Invert;
9227 return 0;
9228 }
Victor Stinner74419f02020-07-03 11:35:37 +02009229 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009230 if (isinstance == -1) {
9231 return 1;
9232 }
9233 if (isinstance) {
9234 *out = Not;
9235 return 0;
9236 }
Victor Stinner74419f02020-07-03 11:35:37 +02009237 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009238 if (isinstance == -1) {
9239 return 1;
9240 }
9241 if (isinstance) {
9242 *out = UAdd;
9243 return 0;
9244 }
Victor Stinner74419f02020-07-03 11:35:37 +02009245 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009246 if (isinstance == -1) {
9247 return 1;
9248 }
9249 if (isinstance) {
9250 *out = USub;
9251 return 0;
9252 }
9253
9254 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
9255 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009256}
9257
9258int
Victor Stinner5cf47822020-11-02 22:03:28 +01009259obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009260 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009261{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009262 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009263
Victor Stinner74419f02020-07-03 11:35:37 +02009264 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009265 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009266 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009267 }
9268 if (isinstance) {
9269 *out = Eq;
9270 return 0;
9271 }
Victor Stinner74419f02020-07-03 11:35:37 +02009272 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009273 if (isinstance == -1) {
9274 return 1;
9275 }
9276 if (isinstance) {
9277 *out = NotEq;
9278 return 0;
9279 }
Victor Stinner74419f02020-07-03 11:35:37 +02009280 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009281 if (isinstance == -1) {
9282 return 1;
9283 }
9284 if (isinstance) {
9285 *out = Lt;
9286 return 0;
9287 }
Victor Stinner74419f02020-07-03 11:35:37 +02009288 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009289 if (isinstance == -1) {
9290 return 1;
9291 }
9292 if (isinstance) {
9293 *out = LtE;
9294 return 0;
9295 }
Victor Stinner74419f02020-07-03 11:35:37 +02009296 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009297 if (isinstance == -1) {
9298 return 1;
9299 }
9300 if (isinstance) {
9301 *out = Gt;
9302 return 0;
9303 }
Victor Stinner74419f02020-07-03 11:35:37 +02009304 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009305 if (isinstance == -1) {
9306 return 1;
9307 }
9308 if (isinstance) {
9309 *out = GtE;
9310 return 0;
9311 }
Victor Stinner74419f02020-07-03 11:35:37 +02009312 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009313 if (isinstance == -1) {
9314 return 1;
9315 }
9316 if (isinstance) {
9317 *out = Is;
9318 return 0;
9319 }
Victor Stinner74419f02020-07-03 11:35:37 +02009320 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009321 if (isinstance == -1) {
9322 return 1;
9323 }
9324 if (isinstance) {
9325 *out = IsNot;
9326 return 0;
9327 }
Victor Stinner74419f02020-07-03 11:35:37 +02009328 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009329 if (isinstance == -1) {
9330 return 1;
9331 }
9332 if (isinstance) {
9333 *out = In;
9334 return 0;
9335 }
Victor Stinner74419f02020-07-03 11:35:37 +02009336 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009337 if (isinstance == -1) {
9338 return 1;
9339 }
9340 if (isinstance) {
9341 *out = NotIn;
9342 return 0;
9343 }
9344
9345 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
9346 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009347}
9348
9349int
Victor Stinner5cf47822020-11-02 22:03:28 +01009350obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009351 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009352{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009353 PyObject* tmp = NULL;
9354 expr_ty target;
9355 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009356 asdl_expr_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009357 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009358
Victor Stinner74419f02020-07-03 11:35:37 +02009359 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009360 return 1;
9361 }
9362 if (tmp == NULL) {
9363 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
9364 return 1;
9365 }
9366 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009367 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009368 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009369 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009370 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009371 }
Victor Stinner74419f02020-07-03 11:35:37 +02009372 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009373 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009374 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009375 if (tmp == NULL) {
9376 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
9377 return 1;
9378 }
9379 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009380 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009381 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009382 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009383 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009384 }
Victor Stinner74419f02020-07-03 11:35:37 +02009385 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009386 return 1;
9387 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009388 if (tmp == NULL) {
9389 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
9390 return 1;
9391 }
9392 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009393 int res;
9394 Py_ssize_t len;
9395 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009396 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009397 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 +02009398 goto failed;
9399 }
9400 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009401 ifs = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009402 if (ifs == NULL) goto failed;
9403 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009404 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009405 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9406 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009407 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009408 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009409 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009410 if (len != PyList_GET_SIZE(tmp)) {
9411 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
9412 goto failed;
9413 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009414 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009415 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009416 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009417 }
Victor Stinner74419f02020-07-03 11:35:37 +02009418 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009419 return 1;
9420 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009421 if (tmp == NULL) {
9422 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
9423 return 1;
9424 }
9425 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009426 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009427 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009428 if (res != 0) goto failed;
9429 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009430 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009431 *out = _PyAST_comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009432 return 0;
9433failed:
9434 Py_XDECREF(tmp);
9435 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009436}
9437
9438int
Victor Stinner5cf47822020-11-02 22:03:28 +01009439obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009440 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009441{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009442 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00009443
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009444 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009445 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009446 int lineno;
9447 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009448 int end_lineno;
9449 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009450
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009451 if (obj == Py_None) {
9452 *out = NULL;
9453 return 0;
9454 }
Victor Stinner74419f02020-07-03 11:35:37 +02009455 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009456 return 1;
9457 }
9458 if (tmp == NULL) {
9459 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
9460 return 1;
9461 }
9462 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009463 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009464 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009465 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009466 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009467 }
Victor Stinner74419f02020-07-03 11:35:37 +02009468 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009469 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009470 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009471 if (tmp == NULL) {
9472 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
9473 return 1;
9474 }
9475 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009476 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009477 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009478 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009479 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009480 }
Victor Stinner74419f02020-07-03 11:35:37 +02009481 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009482 return 1;
9483 }
9484 if (tmp == NULL || tmp == Py_None) {
9485 Py_CLEAR(tmp);
9486 end_lineno = 0;
9487 }
9488 else {
9489 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009490 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009491 if (res != 0) goto failed;
9492 Py_CLEAR(tmp);
9493 }
Victor Stinner74419f02020-07-03 11:35:37 +02009494 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009495 return 1;
9496 }
9497 if (tmp == NULL || tmp == Py_None) {
9498 Py_CLEAR(tmp);
9499 end_col_offset = 0;
9500 }
9501 else {
9502 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009503 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009504 if (res != 0) goto failed;
9505 Py_CLEAR(tmp);
9506 }
Victor Stinner74419f02020-07-03 11:35:37 +02009507 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009508 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009509 if (isinstance == -1) {
9510 return 1;
9511 }
9512 if (isinstance) {
9513 expr_ty type;
9514 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009515 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009516
Victor Stinner74419f02020-07-03 11:35:37 +02009517 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009518 return 1;
9519 }
9520 if (tmp == NULL || tmp == Py_None) {
9521 Py_CLEAR(tmp);
9522 type = NULL;
9523 }
9524 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009525 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009526 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009527 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009528 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009529 }
Victor Stinner74419f02020-07-03 11:35:37 +02009530 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009531 return 1;
9532 }
9533 if (tmp == NULL || tmp == Py_None) {
9534 Py_CLEAR(tmp);
9535 name = NULL;
9536 }
9537 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009538 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009539 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009540 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009541 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009542 }
Victor Stinner74419f02020-07-03 11:35:37 +02009543 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009544 return 1;
9545 }
9546 if (tmp == NULL) {
9547 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9548 return 1;
9549 }
9550 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009551 int res;
9552 Py_ssize_t len;
9553 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009554 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009555 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 +02009556 goto failed;
9557 }
9558 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009559 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009560 if (body == NULL) goto failed;
9561 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009562 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009563 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9564 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009565 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009566 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009567 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009568 if (len != PyList_GET_SIZE(tmp)) {
9569 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9570 goto failed;
9571 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009572 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009573 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009574 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009575 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009576 *out = _PyAST_ExceptHandler(type, name, body, lineno, col_offset,
9577 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009578 if (*out == NULL) goto failed;
9579 return 0;
9580 }
9581
9582 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9583 failed:
9584 Py_XDECREF(tmp);
9585 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009586}
9587
9588int
Victor Stinner5cf47822020-11-02 22:03:28 +01009589obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009590 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009591{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009592 PyObject* tmp = NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009593 asdl_arg_seq* posonlyargs;
9594 asdl_arg_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009595 arg_ty vararg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009596 asdl_arg_seq* kwonlyargs;
9597 asdl_expr_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009598 arg_ty kwarg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009599 asdl_expr_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009600
Victor Stinner74419f02020-07-03 11:35:37 +02009601 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009602 return 1;
9603 }
9604 if (tmp == NULL) {
9605 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9606 return 1;
9607 }
9608 else {
9609 int res;
9610 Py_ssize_t len;
9611 Py_ssize_t i;
9612 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009613 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 +01009614 goto failed;
9615 }
9616 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009617 posonlyargs = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009618 if (posonlyargs == NULL) goto failed;
9619 for (i = 0; i < len; i++) {
9620 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009621 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9622 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009623 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009624 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009625 if (res != 0) goto failed;
9626 if (len != PyList_GET_SIZE(tmp)) {
9627 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9628 goto failed;
9629 }
9630 asdl_seq_SET(posonlyargs, i, val);
9631 }
9632 Py_CLEAR(tmp);
9633 }
Victor Stinner74419f02020-07-03 11:35:37 +02009634 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009635 return 1;
9636 }
9637 if (tmp == NULL) {
9638 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9639 return 1;
9640 }
9641 else {
9642 int res;
9643 Py_ssize_t len;
9644 Py_ssize_t i;
9645 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009646 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 +02009647 goto failed;
9648 }
9649 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009650 args = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009651 if (args == NULL) goto failed;
9652 for (i = 0; i < len; i++) {
9653 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009654 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9655 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009656 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009657 Py_DECREF(tmp2);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009658 if (res != 0) goto failed;
9659 if (len != PyList_GET_SIZE(tmp)) {
9660 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9661 goto failed;
9662 }
9663 asdl_seq_SET(args, i, val);
9664 }
9665 Py_CLEAR(tmp);
9666 }
Victor Stinner74419f02020-07-03 11:35:37 +02009667 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009668 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009669 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009670 if (tmp == NULL || tmp == Py_None) {
9671 Py_CLEAR(tmp);
9672 vararg = NULL;
9673 }
9674 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009675 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009676 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009677 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009678 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009679 }
Victor Stinner74419f02020-07-03 11:35:37 +02009680 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009681 return 1;
9682 }
9683 if (tmp == NULL) {
9684 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9685 return 1;
9686 }
9687 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009688 int res;
9689 Py_ssize_t len;
9690 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009691 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009692 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 +02009693 goto failed;
9694 }
9695 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009696 kwonlyargs = _Py_asdl_arg_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009697 if (kwonlyargs == NULL) goto failed;
9698 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009699 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009700 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9701 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009702 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009703 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009704 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009705 if (len != PyList_GET_SIZE(tmp)) {
9706 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9707 goto failed;
9708 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009709 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009710 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009711 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009712 }
Victor Stinner74419f02020-07-03 11:35:37 +02009713 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009714 return 1;
9715 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009716 if (tmp == NULL) {
9717 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9718 return 1;
9719 }
9720 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009721 int res;
9722 Py_ssize_t len;
9723 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009724 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009725 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 +02009726 goto failed;
9727 }
9728 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009729 kw_defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009730 if (kw_defaults == NULL) goto failed;
9731 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009732 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009733 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9734 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009735 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009736 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009737 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009738 if (len != PyList_GET_SIZE(tmp)) {
9739 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9740 goto failed;
9741 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009742 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009743 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009744 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009745 }
Victor Stinner74419f02020-07-03 11:35:37 +02009746 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009747 return 1;
9748 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009749 if (tmp == NULL || tmp == Py_None) {
9750 Py_CLEAR(tmp);
9751 kwarg = NULL;
9752 }
9753 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009754 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009755 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009756 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009757 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009758 }
Victor Stinner74419f02020-07-03 11:35:37 +02009759 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009760 return 1;
9761 }
9762 if (tmp == NULL) {
9763 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9764 return 1;
9765 }
9766 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009767 int res;
9768 Py_ssize_t len;
9769 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009770 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009771 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 +02009772 goto failed;
9773 }
9774 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009775 defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009776 if (defaults == NULL) goto failed;
9777 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009778 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009779 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9780 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009781 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009782 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009783 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009784 if (len != PyList_GET_SIZE(tmp)) {
9785 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9786 goto failed;
9787 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009788 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009789 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009790 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009791 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009792 *out = _PyAST_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults,
9793 kwarg, defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009794 return 0;
9795failed:
9796 Py_XDECREF(tmp);
9797 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009798}
9799
9800int
Victor Stinner5cf47822020-11-02 22:03:28 +01009801obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009802{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009803 PyObject* tmp = NULL;
9804 identifier arg;
9805 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009806 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009807 int lineno;
9808 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009809 int end_lineno;
9810 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009811
Victor Stinner74419f02020-07-03 11:35:37 +02009812 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009813 return 1;
9814 }
9815 if (tmp == NULL) {
9816 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9817 return 1;
9818 }
9819 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009820 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009821 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009822 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009823 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009824 }
Victor Stinner74419f02020-07-03 11:35:37 +02009825 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009826 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009827 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009828 if (tmp == NULL || tmp == Py_None) {
9829 Py_CLEAR(tmp);
9830 annotation = NULL;
9831 }
9832 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009833 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009834 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009835 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009836 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009837 }
Victor Stinner74419f02020-07-03 11:35:37 +02009838 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009839 return 1;
9840 }
9841 if (tmp == NULL || tmp == Py_None) {
9842 Py_CLEAR(tmp);
9843 type_comment = NULL;
9844 }
9845 else {
9846 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009847 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009848 if (res != 0) goto failed;
9849 Py_CLEAR(tmp);
9850 }
Victor Stinner74419f02020-07-03 11:35:37 +02009851 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009852 return 1;
9853 }
9854 if (tmp == NULL) {
9855 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9856 return 1;
9857 }
9858 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009859 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009860 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009861 if (res != 0) goto failed;
9862 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009863 }
Victor Stinner74419f02020-07-03 11:35:37 +02009864 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009865 return 1;
9866 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009867 if (tmp == NULL) {
9868 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9869 return 1;
9870 }
9871 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009872 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009873 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009874 if (res != 0) goto failed;
9875 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009876 }
Victor Stinner74419f02020-07-03 11:35:37 +02009877 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009878 return 1;
9879 }
9880 if (tmp == NULL || tmp == Py_None) {
9881 Py_CLEAR(tmp);
9882 end_lineno = 0;
9883 }
9884 else {
9885 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009886 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009887 if (res != 0) goto failed;
9888 Py_CLEAR(tmp);
9889 }
Victor Stinner74419f02020-07-03 11:35:37 +02009890 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009891 return 1;
9892 }
9893 if (tmp == NULL || tmp == Py_None) {
9894 Py_CLEAR(tmp);
9895 end_col_offset = 0;
9896 }
9897 else {
9898 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009899 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009900 if (res != 0) goto failed;
9901 Py_CLEAR(tmp);
9902 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009903 *out = _PyAST_arg(arg, annotation, type_comment, lineno, col_offset,
9904 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009905 return 0;
9906failed:
9907 Py_XDECREF(tmp);
9908 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009909}
9910
9911int
Victor Stinner5cf47822020-11-02 22:03:28 +01009912obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out,
9913 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009914{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009915 PyObject* tmp = NULL;
9916 identifier arg;
9917 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009918 int lineno;
9919 int col_offset;
9920 int end_lineno;
9921 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009922
Victor Stinner74419f02020-07-03 11:35:37 +02009923 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009924 return 1;
9925 }
9926 if (tmp == NULL || tmp == Py_None) {
9927 Py_CLEAR(tmp);
9928 arg = NULL;
9929 }
9930 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009931 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009932 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009933 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009934 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009935 }
Victor Stinner74419f02020-07-03 11:35:37 +02009936 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009937 return 1;
9938 }
9939 if (tmp == NULL) {
9940 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9941 return 1;
9942 }
9943 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009944 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009945 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009946 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009947 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009948 }
Victor Stinner74419f02020-07-03 11:35:37 +02009949 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009950 return 1;
9951 }
9952 if (tmp == NULL) {
9953 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9954 return 1;
9955 }
9956 else {
9957 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009958 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009959 if (res != 0) goto failed;
9960 Py_CLEAR(tmp);
9961 }
Victor Stinner74419f02020-07-03 11:35:37 +02009962 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009963 return 1;
9964 }
9965 if (tmp == NULL) {
9966 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9967 return 1;
9968 }
9969 else {
9970 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009971 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009972 if (res != 0) goto failed;
9973 Py_CLEAR(tmp);
9974 }
Victor Stinner74419f02020-07-03 11:35:37 +02009975 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009976 return 1;
9977 }
9978 if (tmp == NULL || tmp == Py_None) {
9979 Py_CLEAR(tmp);
9980 end_lineno = 0;
9981 }
9982 else {
9983 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009984 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009985 if (res != 0) goto failed;
9986 Py_CLEAR(tmp);
9987 }
Victor Stinner74419f02020-07-03 11:35:37 +02009988 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009989 return 1;
9990 }
9991 if (tmp == NULL || tmp == Py_None) {
9992 Py_CLEAR(tmp);
9993 end_col_offset = 0;
9994 }
9995 else {
9996 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009997 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009998 if (res != 0) goto failed;
9999 Py_CLEAR(tmp);
10000 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +020010001 *out = _PyAST_keyword(arg, value, lineno, col_offset, end_lineno,
10002 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010003 return 0;
10004failed:
10005 Py_XDECREF(tmp);
10006 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010007}
10008
10009int
Victor Stinner5cf47822020-11-02 22:03:28 +010010010obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +020010011 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010012{
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010013 PyObject* tmp = NULL;
10014 identifier name;
10015 identifier asname;
Matthew Suozzo75a06f02021-04-10 16:56:28 -040010016 int lineno;
10017 int col_offset;
10018 int end_lineno;
10019 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010020
Victor Stinner74419f02020-07-03 11:35:37 +020010021 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010022 return 1;
10023 }
10024 if (tmp == NULL) {
10025 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
10026 return 1;
10027 }
10028 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010029 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010030 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010031 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +020010032 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010033 }
Victor Stinner74419f02020-07-03 11:35:37 +020010034 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010035 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010036 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010037 if (tmp == NULL || tmp == Py_None) {
10038 Py_CLEAR(tmp);
10039 asname = NULL;
10040 }
10041 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010042 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010043 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010044 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +020010045 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010046 }
Matthew Suozzo75a06f02021-04-10 16:56:28 -040010047 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
10048 return 1;
10049 }
10050 if (tmp == NULL) {
10051 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from alias");
10052 return 1;
10053 }
10054 else {
10055 int res;
10056 res = obj2ast_int(state, tmp, &lineno, arena);
10057 if (res != 0) goto failed;
10058 Py_CLEAR(tmp);
10059 }
10060 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
10061 return 1;
10062 }
10063 if (tmp == NULL) {
10064 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from alias");
10065 return 1;
10066 }
10067 else {
10068 int res;
10069 res = obj2ast_int(state, tmp, &col_offset, arena);
10070 if (res != 0) goto failed;
10071 Py_CLEAR(tmp);
10072 }
10073 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
10074 return 1;
10075 }
10076 if (tmp == NULL || tmp == Py_None) {
10077 Py_CLEAR(tmp);
10078 end_lineno = 0;
10079 }
10080 else {
10081 int res;
10082 res = obj2ast_int(state, tmp, &end_lineno, arena);
10083 if (res != 0) goto failed;
10084 Py_CLEAR(tmp);
10085 }
10086 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
10087 return 1;
10088 }
10089 if (tmp == NULL || tmp == Py_None) {
10090 Py_CLEAR(tmp);
10091 end_col_offset = 0;
10092 }
10093 else {
10094 int res;
10095 res = obj2ast_int(state, tmp, &end_col_offset, arena);
10096 if (res != 0) goto failed;
10097 Py_CLEAR(tmp);
10098 }
10099 *out = _PyAST_alias(name, asname, lineno, col_offset, end_lineno,
10100 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010101 return 0;
10102failed:
10103 Py_XDECREF(tmp);
10104 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010105}
10106
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -050010107int
Victor Stinner5cf47822020-11-02 22:03:28 +010010108obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +020010109 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -050010110{
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010111 PyObject* tmp = NULL;
10112 expr_ty context_expr;
10113 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -050010114
Victor Stinner74419f02020-07-03 11:35:37 +020010115 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010116 return 1;
10117 }
10118 if (tmp == NULL) {
10119 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
10120 return 1;
10121 }
10122 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010123 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010124 res = obj2ast_expr(state, tmp, &context_expr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010125 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +020010126 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010127 }
Victor Stinner74419f02020-07-03 11:35:37 +020010128 if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -050010129 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010130 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020010131 if (tmp == NULL || tmp == Py_None) {
10132 Py_CLEAR(tmp);
10133 optional_vars = NULL;
10134 }
10135 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010136 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010137 res = obj2ast_expr(state, tmp, &optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010138 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +020010139 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010140 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +020010141 *out = _PyAST_withitem(context_expr, optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +020010142 return 0;
10143failed:
10144 Py_XDECREF(tmp);
10145 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -050010146}
10147
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010148int
Brandt Bucher145bf262021-02-26 14:51:55 -080010149obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
10150 PyArena* arena)
10151{
10152 PyObject* tmp = NULL;
Nick Coghlan1e7b8582021-04-29 15:58:44 +100010153 pattern_ty pattern;
Brandt Bucher145bf262021-02-26 14:51:55 -080010154 expr_ty guard;
10155 asdl_stmt_seq* body;
10156
10157 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
10158 return 1;
10159 }
10160 if (tmp == NULL) {
10161 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from match_case");
10162 return 1;
10163 }
10164 else {
10165 int res;
Nick Coghlan1e7b8582021-04-29 15:58:44 +100010166 res = obj2ast_pattern(state, tmp, &pattern, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -080010167 if (res != 0) goto failed;
10168 Py_CLEAR(tmp);
10169 }
10170 if (_PyObject_LookupAttr(obj, state->guard, &tmp) < 0) {
10171 return 1;
10172 }
10173 if (tmp == NULL || tmp == Py_None) {
10174 Py_CLEAR(tmp);
10175 guard = NULL;
10176 }
10177 else {
10178 int res;
10179 res = obj2ast_expr(state, tmp, &guard, arena);
10180 if (res != 0) goto failed;
10181 Py_CLEAR(tmp);
10182 }
10183 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
10184 return 1;
10185 }
10186 if (tmp == NULL) {
10187 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from match_case");
10188 return 1;
10189 }
10190 else {
10191 int res;
10192 Py_ssize_t len;
10193 Py_ssize_t i;
10194 if (!PyList_Check(tmp)) {
10195 PyErr_Format(PyExc_TypeError, "match_case field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10196 goto failed;
10197 }
10198 len = PyList_GET_SIZE(tmp);
10199 body = _Py_asdl_stmt_seq_new(len, arena);
10200 if (body == NULL) goto failed;
10201 for (i = 0; i < len; i++) {
10202 stmt_ty val;
10203 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10204 Py_INCREF(tmp2);
10205 res = obj2ast_stmt(state, tmp2, &val, arena);
10206 Py_DECREF(tmp2);
10207 if (res != 0) goto failed;
10208 if (len != PyList_GET_SIZE(tmp)) {
10209 PyErr_SetString(PyExc_RuntimeError, "match_case field \"body\" changed size during iteration");
10210 goto failed;
10211 }
10212 asdl_seq_SET(body, i, val);
10213 }
10214 Py_CLEAR(tmp);
10215 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +020010216 *out = _PyAST_match_case(pattern, guard, body, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -080010217 return 0;
10218failed:
10219 Py_XDECREF(tmp);
10220 return 1;
10221}
10222
10223int
Nick Coghlan1e7b8582021-04-29 15:58:44 +100010224obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
10225 PyArena* arena)
10226{
10227 int isinstance;
10228
10229 PyObject *tmp = NULL;
10230 PyObject *tp;
10231 int lineno;
10232 int col_offset;
10233 int end_lineno;
10234 int end_col_offset;
10235
10236 if (obj == Py_None) {
10237 *out = NULL;
10238 return 0;
10239 }
10240 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
10241 return 1;
10242 }
10243 if (tmp == NULL) {
10244 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from pattern");
10245 return 1;
10246 }
10247 else {
10248 int res;
10249 res = obj2ast_int(state, tmp, &lineno, arena);
10250 if (res != 0) goto failed;
10251 Py_CLEAR(tmp);
10252 }
10253 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
10254 return 1;
10255 }
10256 if (tmp == NULL) {
10257 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from pattern");
10258 return 1;
10259 }
10260 else {
10261 int res;
10262 res = obj2ast_int(state, tmp, &col_offset, arena);
10263 if (res != 0) goto failed;
10264 Py_CLEAR(tmp);
10265 }
10266 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
10267 return 1;
10268 }
10269 if (tmp == NULL) {
10270 PyErr_SetString(PyExc_TypeError, "required field \"end_lineno\" missing from pattern");
10271 return 1;
10272 }
10273 else {
10274 int res;
10275 res = obj2ast_int(state, tmp, &end_lineno, arena);
10276 if (res != 0) goto failed;
10277 Py_CLEAR(tmp);
10278 }
10279 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
10280 return 1;
10281 }
10282 if (tmp == NULL) {
10283 PyErr_SetString(PyExc_TypeError, "required field \"end_col_offset\" missing from pattern");
10284 return 1;
10285 }
10286 else {
10287 int res;
10288 res = obj2ast_int(state, tmp, &end_col_offset, arena);
10289 if (res != 0) goto failed;
10290 Py_CLEAR(tmp);
10291 }
10292 tp = state->MatchValue_type;
10293 isinstance = PyObject_IsInstance(obj, tp);
10294 if (isinstance == -1) {
10295 return 1;
10296 }
10297 if (isinstance) {
10298 expr_ty value;
10299
10300 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
10301 return 1;
10302 }
10303 if (tmp == NULL) {
10304 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from MatchValue");
10305 return 1;
10306 }
10307 else {
10308 int res;
10309 res = obj2ast_expr(state, tmp, &value, arena);
10310 if (res != 0) goto failed;
10311 Py_CLEAR(tmp);
10312 }
10313 *out = _PyAST_MatchValue(value, lineno, col_offset, end_lineno,
10314 end_col_offset, arena);
10315 if (*out == NULL) goto failed;
10316 return 0;
10317 }
10318 tp = state->MatchSingleton_type;
10319 isinstance = PyObject_IsInstance(obj, tp);
10320 if (isinstance == -1) {
10321 return 1;
10322 }
10323 if (isinstance) {
10324 constant value;
10325
10326 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
10327 return 1;
10328 }
10329 if (tmp == NULL) {
10330 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from MatchSingleton");
10331 return 1;
10332 }
10333 else {
10334 int res;
10335 res = obj2ast_constant(state, tmp, &value, arena);
10336 if (res != 0) goto failed;
10337 Py_CLEAR(tmp);
10338 }
10339 *out = _PyAST_MatchSingleton(value, lineno, col_offset, end_lineno,
10340 end_col_offset, arena);
10341 if (*out == NULL) goto failed;
10342 return 0;
10343 }
10344 tp = state->MatchSequence_type;
10345 isinstance = PyObject_IsInstance(obj, tp);
10346 if (isinstance == -1) {
10347 return 1;
10348 }
10349 if (isinstance) {
10350 asdl_pattern_seq* patterns;
10351
10352 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
10353 return 1;
10354 }
10355 if (tmp == NULL) {
10356 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchSequence");
10357 return 1;
10358 }
10359 else {
10360 int res;
10361 Py_ssize_t len;
10362 Py_ssize_t i;
10363 if (!PyList_Check(tmp)) {
10364 PyErr_Format(PyExc_TypeError, "MatchSequence field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10365 goto failed;
10366 }
10367 len = PyList_GET_SIZE(tmp);
10368 patterns = _Py_asdl_pattern_seq_new(len, arena);
10369 if (patterns == NULL) goto failed;
10370 for (i = 0; i < len; i++) {
10371 pattern_ty val;
10372 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10373 Py_INCREF(tmp2);
10374 res = obj2ast_pattern(state, tmp2, &val, arena);
10375 Py_DECREF(tmp2);
10376 if (res != 0) goto failed;
10377 if (len != PyList_GET_SIZE(tmp)) {
10378 PyErr_SetString(PyExc_RuntimeError, "MatchSequence field \"patterns\" changed size during iteration");
10379 goto failed;
10380 }
10381 asdl_seq_SET(patterns, i, val);
10382 }
10383 Py_CLEAR(tmp);
10384 }
10385 *out = _PyAST_MatchSequence(patterns, lineno, col_offset, end_lineno,
10386 end_col_offset, arena);
10387 if (*out == NULL) goto failed;
10388 return 0;
10389 }
10390 tp = state->MatchMapping_type;
10391 isinstance = PyObject_IsInstance(obj, tp);
10392 if (isinstance == -1) {
10393 return 1;
10394 }
10395 if (isinstance) {
10396 asdl_expr_seq* keys;
10397 asdl_pattern_seq* patterns;
10398 identifier rest;
10399
10400 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
10401 return 1;
10402 }
10403 if (tmp == NULL) {
10404 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from MatchMapping");
10405 return 1;
10406 }
10407 else {
10408 int res;
10409 Py_ssize_t len;
10410 Py_ssize_t i;
10411 if (!PyList_Check(tmp)) {
10412 PyErr_Format(PyExc_TypeError, "MatchMapping field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10413 goto failed;
10414 }
10415 len = PyList_GET_SIZE(tmp);
10416 keys = _Py_asdl_expr_seq_new(len, arena);
10417 if (keys == NULL) goto failed;
10418 for (i = 0; i < len; i++) {
10419 expr_ty val;
10420 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10421 Py_INCREF(tmp2);
10422 res = obj2ast_expr(state, tmp2, &val, arena);
10423 Py_DECREF(tmp2);
10424 if (res != 0) goto failed;
10425 if (len != PyList_GET_SIZE(tmp)) {
10426 PyErr_SetString(PyExc_RuntimeError, "MatchMapping field \"keys\" changed size during iteration");
10427 goto failed;
10428 }
10429 asdl_seq_SET(keys, i, val);
10430 }
10431 Py_CLEAR(tmp);
10432 }
10433 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
10434 return 1;
10435 }
10436 if (tmp == NULL) {
10437 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchMapping");
10438 return 1;
10439 }
10440 else {
10441 int res;
10442 Py_ssize_t len;
10443 Py_ssize_t i;
10444 if (!PyList_Check(tmp)) {
10445 PyErr_Format(PyExc_TypeError, "MatchMapping field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10446 goto failed;
10447 }
10448 len = PyList_GET_SIZE(tmp);
10449 patterns = _Py_asdl_pattern_seq_new(len, arena);
10450 if (patterns == NULL) goto failed;
10451 for (i = 0; i < len; i++) {
10452 pattern_ty val;
10453 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10454 Py_INCREF(tmp2);
10455 res = obj2ast_pattern(state, tmp2, &val, arena);
10456 Py_DECREF(tmp2);
10457 if (res != 0) goto failed;
10458 if (len != PyList_GET_SIZE(tmp)) {
10459 PyErr_SetString(PyExc_RuntimeError, "MatchMapping field \"patterns\" changed size during iteration");
10460 goto failed;
10461 }
10462 asdl_seq_SET(patterns, i, val);
10463 }
10464 Py_CLEAR(tmp);
10465 }
10466 if (_PyObject_LookupAttr(obj, state->rest, &tmp) < 0) {
10467 return 1;
10468 }
10469 if (tmp == NULL || tmp == Py_None) {
10470 Py_CLEAR(tmp);
10471 rest = NULL;
10472 }
10473 else {
10474 int res;
10475 res = obj2ast_identifier(state, tmp, &rest, arena);
10476 if (res != 0) goto failed;
10477 Py_CLEAR(tmp);
10478 }
10479 *out = _PyAST_MatchMapping(keys, patterns, rest, lineno, col_offset,
10480 end_lineno, end_col_offset, arena);
10481 if (*out == NULL) goto failed;
10482 return 0;
10483 }
10484 tp = state->MatchClass_type;
10485 isinstance = PyObject_IsInstance(obj, tp);
10486 if (isinstance == -1) {
10487 return 1;
10488 }
10489 if (isinstance) {
10490 expr_ty cls;
10491 asdl_pattern_seq* patterns;
10492 asdl_identifier_seq* kwd_attrs;
10493 asdl_pattern_seq* kwd_patterns;
10494
10495 if (_PyObject_LookupAttr(obj, state->cls, &tmp) < 0) {
10496 return 1;
10497 }
10498 if (tmp == NULL) {
10499 PyErr_SetString(PyExc_TypeError, "required field \"cls\" missing from MatchClass");
10500 return 1;
10501 }
10502 else {
10503 int res;
10504 res = obj2ast_expr(state, tmp, &cls, arena);
10505 if (res != 0) goto failed;
10506 Py_CLEAR(tmp);
10507 }
10508 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
10509 return 1;
10510 }
10511 if (tmp == NULL) {
10512 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchClass");
10513 return 1;
10514 }
10515 else {
10516 int res;
10517 Py_ssize_t len;
10518 Py_ssize_t i;
10519 if (!PyList_Check(tmp)) {
10520 PyErr_Format(PyExc_TypeError, "MatchClass field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10521 goto failed;
10522 }
10523 len = PyList_GET_SIZE(tmp);
10524 patterns = _Py_asdl_pattern_seq_new(len, arena);
10525 if (patterns == NULL) goto failed;
10526 for (i = 0; i < len; i++) {
10527 pattern_ty val;
10528 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10529 Py_INCREF(tmp2);
10530 res = obj2ast_pattern(state, tmp2, &val, arena);
10531 Py_DECREF(tmp2);
10532 if (res != 0) goto failed;
10533 if (len != PyList_GET_SIZE(tmp)) {
10534 PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"patterns\" changed size during iteration");
10535 goto failed;
10536 }
10537 asdl_seq_SET(patterns, i, val);
10538 }
10539 Py_CLEAR(tmp);
10540 }
10541 if (_PyObject_LookupAttr(obj, state->kwd_attrs, &tmp) < 0) {
10542 return 1;
10543 }
10544 if (tmp == NULL) {
10545 PyErr_SetString(PyExc_TypeError, "required field \"kwd_attrs\" missing from MatchClass");
10546 return 1;
10547 }
10548 else {
10549 int res;
10550 Py_ssize_t len;
10551 Py_ssize_t i;
10552 if (!PyList_Check(tmp)) {
10553 PyErr_Format(PyExc_TypeError, "MatchClass field \"kwd_attrs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10554 goto failed;
10555 }
10556 len = PyList_GET_SIZE(tmp);
10557 kwd_attrs = _Py_asdl_identifier_seq_new(len, arena);
10558 if (kwd_attrs == NULL) goto failed;
10559 for (i = 0; i < len; i++) {
10560 identifier val;
10561 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10562 Py_INCREF(tmp2);
10563 res = obj2ast_identifier(state, tmp2, &val, arena);
10564 Py_DECREF(tmp2);
10565 if (res != 0) goto failed;
10566 if (len != PyList_GET_SIZE(tmp)) {
10567 PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"kwd_attrs\" changed size during iteration");
10568 goto failed;
10569 }
10570 asdl_seq_SET(kwd_attrs, i, val);
10571 }
10572 Py_CLEAR(tmp);
10573 }
10574 if (_PyObject_LookupAttr(obj, state->kwd_patterns, &tmp) < 0) {
10575 return 1;
10576 }
10577 if (tmp == NULL) {
10578 PyErr_SetString(PyExc_TypeError, "required field \"kwd_patterns\" missing from MatchClass");
10579 return 1;
10580 }
10581 else {
10582 int res;
10583 Py_ssize_t len;
10584 Py_ssize_t i;
10585 if (!PyList_Check(tmp)) {
10586 PyErr_Format(PyExc_TypeError, "MatchClass field \"kwd_patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10587 goto failed;
10588 }
10589 len = PyList_GET_SIZE(tmp);
10590 kwd_patterns = _Py_asdl_pattern_seq_new(len, arena);
10591 if (kwd_patterns == NULL) goto failed;
10592 for (i = 0; i < len; i++) {
10593 pattern_ty val;
10594 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10595 Py_INCREF(tmp2);
10596 res = obj2ast_pattern(state, tmp2, &val, arena);
10597 Py_DECREF(tmp2);
10598 if (res != 0) goto failed;
10599 if (len != PyList_GET_SIZE(tmp)) {
10600 PyErr_SetString(PyExc_RuntimeError, "MatchClass field \"kwd_patterns\" changed size during iteration");
10601 goto failed;
10602 }
10603 asdl_seq_SET(kwd_patterns, i, val);
10604 }
10605 Py_CLEAR(tmp);
10606 }
10607 *out = _PyAST_MatchClass(cls, patterns, kwd_attrs, kwd_patterns,
10608 lineno, col_offset, end_lineno,
10609 end_col_offset, arena);
10610 if (*out == NULL) goto failed;
10611 return 0;
10612 }
10613 tp = state->MatchStar_type;
10614 isinstance = PyObject_IsInstance(obj, tp);
10615 if (isinstance == -1) {
10616 return 1;
10617 }
10618 if (isinstance) {
10619 identifier name;
10620
10621 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
10622 return 1;
10623 }
10624 if (tmp == NULL || tmp == Py_None) {
10625 Py_CLEAR(tmp);
10626 name = NULL;
10627 }
10628 else {
10629 int res;
10630 res = obj2ast_identifier(state, tmp, &name, arena);
10631 if (res != 0) goto failed;
10632 Py_CLEAR(tmp);
10633 }
10634 *out = _PyAST_MatchStar(name, lineno, col_offset, end_lineno,
10635 end_col_offset, arena);
10636 if (*out == NULL) goto failed;
10637 return 0;
10638 }
10639 tp = state->MatchAs_type;
10640 isinstance = PyObject_IsInstance(obj, tp);
10641 if (isinstance == -1) {
10642 return 1;
10643 }
10644 if (isinstance) {
10645 pattern_ty pattern;
10646 identifier name;
10647
10648 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
10649 return 1;
10650 }
10651 if (tmp == NULL || tmp == Py_None) {
10652 Py_CLEAR(tmp);
10653 pattern = NULL;
10654 }
10655 else {
10656 int res;
10657 res = obj2ast_pattern(state, tmp, &pattern, arena);
10658 if (res != 0) goto failed;
10659 Py_CLEAR(tmp);
10660 }
10661 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
10662 return 1;
10663 }
10664 if (tmp == NULL || tmp == Py_None) {
10665 Py_CLEAR(tmp);
10666 name = NULL;
10667 }
10668 else {
10669 int res;
10670 res = obj2ast_identifier(state, tmp, &name, arena);
10671 if (res != 0) goto failed;
10672 Py_CLEAR(tmp);
10673 }
10674 *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno,
10675 end_col_offset, arena);
10676 if (*out == NULL) goto failed;
10677 return 0;
10678 }
10679 tp = state->MatchOr_type;
10680 isinstance = PyObject_IsInstance(obj, tp);
10681 if (isinstance == -1) {
10682 return 1;
10683 }
10684 if (isinstance) {
10685 asdl_pattern_seq* patterns;
10686
10687 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
10688 return 1;
10689 }
10690 if (tmp == NULL) {
10691 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr");
10692 return 1;
10693 }
10694 else {
10695 int res;
10696 Py_ssize_t len;
10697 Py_ssize_t i;
10698 if (!PyList_Check(tmp)) {
10699 PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
10700 goto failed;
10701 }
10702 len = PyList_GET_SIZE(tmp);
10703 patterns = _Py_asdl_pattern_seq_new(len, arena);
10704 if (patterns == NULL) goto failed;
10705 for (i = 0; i < len; i++) {
10706 pattern_ty val;
10707 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
10708 Py_INCREF(tmp2);
10709 res = obj2ast_pattern(state, tmp2, &val, arena);
10710 Py_DECREF(tmp2);
10711 if (res != 0) goto failed;
10712 if (len != PyList_GET_SIZE(tmp)) {
10713 PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration");
10714 goto failed;
10715 }
10716 asdl_seq_SET(patterns, i, val);
10717 }
10718 Py_CLEAR(tmp);
10719 }
10720 *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno,
10721 end_col_offset, arena);
10722 if (*out == NULL) goto failed;
10723 return 0;
10724 }
10725
10726 PyErr_Format(PyExc_TypeError, "expected some sort of pattern, but got %R", obj);
10727 failed:
10728 Py_XDECREF(tmp);
10729 return 1;
10730}
10731
10732int
Victor Stinner5cf47822020-11-02 22:03:28 +010010733obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty*
10734 out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010735{
10736 int isinstance;
10737
10738 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -070010739 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010740
10741 if (obj == Py_None) {
10742 *out = NULL;
10743 return 0;
10744 }
Victor Stinner74419f02020-07-03 11:35:37 +020010745 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -070010746 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010747 if (isinstance == -1) {
10748 return 1;
10749 }
10750 if (isinstance) {
10751 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -070010752 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010753
Victor Stinner74419f02020-07-03 11:35:37 +020010754 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010755 return 1;
10756 }
10757 if (tmp == NULL) {
10758 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
10759 return 1;
10760 }
10761 else {
10762 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010763 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010764 if (res != 0) goto failed;
10765 Py_CLEAR(tmp);
10766 }
Victor Stinner74419f02020-07-03 11:35:37 +020010767 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -070010768 return 1;
10769 }
10770 if (tmp == NULL) {
10771 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
10772 return 1;
10773 }
10774 else {
10775 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010776 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -070010777 if (res != 0) goto failed;
10778 Py_CLEAR(tmp);
10779 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +020010780 *out = _PyAST_TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010781 if (*out == NULL) goto failed;
10782 return 0;
10783 }
10784
10785 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
10786 failed:
10787 Py_XDECREF(tmp);
10788 return 1;
10789}
10790
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010791
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010792static int
10793astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010794{
Victor Stinner5cf47822020-11-02 22:03:28 +010010795 struct ast_state *state = get_ast_state();
10796 if (state == NULL) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010797 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010798 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010799 if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010800 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010801 }
Brandt Bucherd2f96672020-02-06 06:45:46 -080010802 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010803 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010804 }
10805 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010806 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010807 }
10808 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010809 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010810 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010811 if (PyModule_AddObjectRef(m, "mod", state->mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010812 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010813 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010814 if (PyModule_AddObjectRef(m, "Module", state->Module_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010815 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010816 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010817 if (PyModule_AddObjectRef(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010818 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010819 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010820 if (PyModule_AddObjectRef(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010821 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010822 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010823 if (PyModule_AddObjectRef(m, "FunctionType", state->FunctionType_type) < 0)
10824 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010825 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010826 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010827 if (PyModule_AddObjectRef(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010828 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010829 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010830 if (PyModule_AddObjectRef(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010831 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010832 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010833 if (PyModule_AddObjectRef(m, "AsyncFunctionDef",
10834 state->AsyncFunctionDef_type) < 0) {
10835 return -1;
10836 }
10837 if (PyModule_AddObjectRef(m, "ClassDef", state->ClassDef_type) < 0) {
10838 return -1;
10839 }
10840 if (PyModule_AddObjectRef(m, "Return", state->Return_type) < 0) {
10841 return -1;
10842 }
10843 if (PyModule_AddObjectRef(m, "Delete", state->Delete_type) < 0) {
10844 return -1;
10845 }
10846 if (PyModule_AddObjectRef(m, "Assign", state->Assign_type) < 0) {
10847 return -1;
10848 }
10849 if (PyModule_AddObjectRef(m, "AugAssign", state->AugAssign_type) < 0) {
10850 return -1;
10851 }
10852 if (PyModule_AddObjectRef(m, "AnnAssign", state->AnnAssign_type) < 0) {
10853 return -1;
10854 }
10855 if (PyModule_AddObjectRef(m, "For", state->For_type) < 0) {
10856 return -1;
10857 }
10858 if (PyModule_AddObjectRef(m, "AsyncFor", state->AsyncFor_type) < 0) {
10859 return -1;
10860 }
10861 if (PyModule_AddObjectRef(m, "While", state->While_type) < 0) {
10862 return -1;
10863 }
10864 if (PyModule_AddObjectRef(m, "If", state->If_type) < 0) {
10865 return -1;
10866 }
10867 if (PyModule_AddObjectRef(m, "With", state->With_type) < 0) {
10868 return -1;
10869 }
10870 if (PyModule_AddObjectRef(m, "AsyncWith", state->AsyncWith_type) < 0) {
10871 return -1;
10872 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010873 if (PyModule_AddObjectRef(m, "Match", state->Match_type) < 0) {
10874 return -1;
10875 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010876 if (PyModule_AddObjectRef(m, "Raise", state->Raise_type) < 0) {
10877 return -1;
10878 }
10879 if (PyModule_AddObjectRef(m, "Try", state->Try_type) < 0) {
10880 return -1;
10881 }
10882 if (PyModule_AddObjectRef(m, "Assert", state->Assert_type) < 0) {
10883 return -1;
10884 }
10885 if (PyModule_AddObjectRef(m, "Import", state->Import_type) < 0) {
10886 return -1;
10887 }
10888 if (PyModule_AddObjectRef(m, "ImportFrom", state->ImportFrom_type) < 0) {
10889 return -1;
10890 }
10891 if (PyModule_AddObjectRef(m, "Global", state->Global_type) < 0) {
10892 return -1;
10893 }
10894 if (PyModule_AddObjectRef(m, "Nonlocal", state->Nonlocal_type) < 0) {
10895 return -1;
10896 }
10897 if (PyModule_AddObjectRef(m, "Expr", state->Expr_type) < 0) {
10898 return -1;
10899 }
10900 if (PyModule_AddObjectRef(m, "Pass", state->Pass_type) < 0) {
10901 return -1;
10902 }
10903 if (PyModule_AddObjectRef(m, "Break", state->Break_type) < 0) {
10904 return -1;
10905 }
10906 if (PyModule_AddObjectRef(m, "Continue", state->Continue_type) < 0) {
10907 return -1;
10908 }
10909 if (PyModule_AddObjectRef(m, "expr", state->expr_type) < 0) {
10910 return -1;
10911 }
10912 if (PyModule_AddObjectRef(m, "BoolOp", state->BoolOp_type) < 0) {
10913 return -1;
10914 }
10915 if (PyModule_AddObjectRef(m, "NamedExpr", state->NamedExpr_type) < 0) {
10916 return -1;
10917 }
10918 if (PyModule_AddObjectRef(m, "BinOp", state->BinOp_type) < 0) {
10919 return -1;
10920 }
10921 if (PyModule_AddObjectRef(m, "UnaryOp", state->UnaryOp_type) < 0) {
10922 return -1;
10923 }
10924 if (PyModule_AddObjectRef(m, "Lambda", state->Lambda_type) < 0) {
10925 return -1;
10926 }
10927 if (PyModule_AddObjectRef(m, "IfExp", state->IfExp_type) < 0) {
10928 return -1;
10929 }
10930 if (PyModule_AddObjectRef(m, "Dict", state->Dict_type) < 0) {
10931 return -1;
10932 }
10933 if (PyModule_AddObjectRef(m, "Set", state->Set_type) < 0) {
10934 return -1;
10935 }
10936 if (PyModule_AddObjectRef(m, "ListComp", state->ListComp_type) < 0) {
10937 return -1;
10938 }
10939 if (PyModule_AddObjectRef(m, "SetComp", state->SetComp_type) < 0) {
10940 return -1;
10941 }
10942 if (PyModule_AddObjectRef(m, "DictComp", state->DictComp_type) < 0) {
10943 return -1;
10944 }
10945 if (PyModule_AddObjectRef(m, "GeneratorExp", state->GeneratorExp_type) < 0)
10946 {
10947 return -1;
10948 }
10949 if (PyModule_AddObjectRef(m, "Await", state->Await_type) < 0) {
10950 return -1;
10951 }
10952 if (PyModule_AddObjectRef(m, "Yield", state->Yield_type) < 0) {
10953 return -1;
10954 }
10955 if (PyModule_AddObjectRef(m, "YieldFrom", state->YieldFrom_type) < 0) {
10956 return -1;
10957 }
10958 if (PyModule_AddObjectRef(m, "Compare", state->Compare_type) < 0) {
10959 return -1;
10960 }
10961 if (PyModule_AddObjectRef(m, "Call", state->Call_type) < 0) {
10962 return -1;
10963 }
10964 if (PyModule_AddObjectRef(m, "FormattedValue", state->FormattedValue_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -080010965 < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010966 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010967 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010968 if (PyModule_AddObjectRef(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010969 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010970 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010971 if (PyModule_AddObjectRef(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010972 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010973 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010974 if (PyModule_AddObjectRef(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010975 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010976 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010977 if (PyModule_AddObjectRef(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010978 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010979 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010980 if (PyModule_AddObjectRef(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010981 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010982 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010983 if (PyModule_AddObjectRef(m, "Name", state->Name_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010984 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010985 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010986 if (PyModule_AddObjectRef(m, "List", state->List_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010987 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010988 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010989 if (PyModule_AddObjectRef(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010990 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010991 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010992 if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010993 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010994 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010995 if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0)
10996 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010997 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010998 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010999 if (PyModule_AddObjectRef(m, "Load", state->Load_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011000 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011001 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011002 if (PyModule_AddObjectRef(m, "Store", state->Store_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011003 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011004 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011005 if (PyModule_AddObjectRef(m, "Del", state->Del_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011006 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011007 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011008 if (PyModule_AddObjectRef(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011009 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011010 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011011 if (PyModule_AddObjectRef(m, "And", state->And_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011012 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011013 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011014 if (PyModule_AddObjectRef(m, "Or", state->Or_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011015 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011016 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011017 if (PyModule_AddObjectRef(m, "operator", state->operator_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011018 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011019 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011020 if (PyModule_AddObjectRef(m, "Add", state->Add_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011021 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011022 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011023 if (PyModule_AddObjectRef(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011024 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011025 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011026 if (PyModule_AddObjectRef(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011027 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011028 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011029 if (PyModule_AddObjectRef(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011030 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011031 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011032 if (PyModule_AddObjectRef(m, "Div", state->Div_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011033 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011034 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011035 if (PyModule_AddObjectRef(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011036 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011037 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011038 if (PyModule_AddObjectRef(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011039 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011040 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011041 if (PyModule_AddObjectRef(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011042 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011043 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011044 if (PyModule_AddObjectRef(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011045 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011046 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011047 if (PyModule_AddObjectRef(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011048 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011049 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011050 if (PyModule_AddObjectRef(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011051 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011052 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011053 if (PyModule_AddObjectRef(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011054 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011055 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011056 if (PyModule_AddObjectRef(m, "FloorDiv", state->FloorDiv_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011057 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011058 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011059 if (PyModule_AddObjectRef(m, "unaryop", state->unaryop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011060 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011061 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011062 if (PyModule_AddObjectRef(m, "Invert", state->Invert_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011063 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011064 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011065 if (PyModule_AddObjectRef(m, "Not", state->Not_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011066 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011067 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011068 if (PyModule_AddObjectRef(m, "UAdd", state->UAdd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011069 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011070 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011071 if (PyModule_AddObjectRef(m, "USub", state->USub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011072 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011073 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011074 if (PyModule_AddObjectRef(m, "cmpop", state->cmpop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011075 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011076 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011077 if (PyModule_AddObjectRef(m, "Eq", state->Eq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011078 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011079 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011080 if (PyModule_AddObjectRef(m, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011081 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011082 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011083 if (PyModule_AddObjectRef(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011084 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011085 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011086 if (PyModule_AddObjectRef(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011087 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011088 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011089 if (PyModule_AddObjectRef(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011090 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020011091 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011092 if (PyModule_AddObjectRef(m, "GtE", state->GtE_type) < 0) {
11093 return -1;
11094 }
11095 if (PyModule_AddObjectRef(m, "Is", state->Is_type) < 0) {
11096 return -1;
11097 }
11098 if (PyModule_AddObjectRef(m, "IsNot", state->IsNot_type) < 0) {
11099 return -1;
11100 }
11101 if (PyModule_AddObjectRef(m, "In", state->In_type) < 0) {
11102 return -1;
11103 }
11104 if (PyModule_AddObjectRef(m, "NotIn", state->NotIn_type) < 0) {
11105 return -1;
11106 }
11107 if (PyModule_AddObjectRef(m, "comprehension", state->comprehension_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -080011108 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011109 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011110 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011111 if (PyModule_AddObjectRef(m, "excepthandler", state->excepthandler_type) <
11112 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011113 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011114 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011115 if (PyModule_AddObjectRef(m, "ExceptHandler", state->ExceptHandler_type) <
11116 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011117 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011118 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011119 if (PyModule_AddObjectRef(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011120 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011121 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011122 if (PyModule_AddObjectRef(m, "arg", state->arg_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011123 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011124 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011125 if (PyModule_AddObjectRef(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011126 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011127 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011128 if (PyModule_AddObjectRef(m, "alias", state->alias_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011129 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011130 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011131 if (PyModule_AddObjectRef(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011132 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011133 }
Brandt Bucher145bf262021-02-26 14:51:55 -080011134 if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) {
11135 return -1;
11136 }
Nick Coghlan1e7b8582021-04-29 15:58:44 +100011137 if (PyModule_AddObjectRef(m, "pattern", state->pattern_type) < 0) {
11138 return -1;
11139 }
11140 if (PyModule_AddObjectRef(m, "MatchValue", state->MatchValue_type) < 0) {
11141 return -1;
11142 }
11143 if (PyModule_AddObjectRef(m, "MatchSingleton", state->MatchSingleton_type)
11144 < 0) {
11145 return -1;
11146 }
11147 if (PyModule_AddObjectRef(m, "MatchSequence", state->MatchSequence_type) <
11148 0) {
11149 return -1;
11150 }
11151 if (PyModule_AddObjectRef(m, "MatchMapping", state->MatchMapping_type) < 0)
11152 {
11153 return -1;
11154 }
11155 if (PyModule_AddObjectRef(m, "MatchClass", state->MatchClass_type) < 0) {
11156 return -1;
11157 }
11158 if (PyModule_AddObjectRef(m, "MatchStar", state->MatchStar_type) < 0) {
11159 return -1;
11160 }
11161 if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) {
11162 return -1;
11163 }
11164 if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) {
11165 return -1;
11166 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011167 if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011168 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011169 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010011170 if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011171 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080011172 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011173 return 0;
11174}
Victor Stinner91e1bc12020-07-03 14:15:53 +020011175
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011176static PyModuleDef_Slot astmodule_slots[] = {
11177 {Py_mod_exec, astmodule_exec},
11178 {0, NULL}
11179};
11180
11181static struct PyModuleDef _astmodule = {
11182 PyModuleDef_HEAD_INIT,
11183 .m_name = "_ast",
Victor Stinner5cf47822020-11-02 22:03:28 +010011184 // The _ast module uses a per-interpreter state (PyInterpreterState.ast)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020011185 .m_size = 0,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011186 .m_slots = astmodule_slots,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011187};
11188
11189PyMODINIT_FUNC
11190PyInit__ast(void)
11191{
11192 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000011193}
11194
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000011195
Martin v. Löwisbd260da2006-02-26 19:42:26 +000011196PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000011197{
Victor Stinner5cf47822020-11-02 22:03:28 +010011198 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011199 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020011200 return NULL;
Victor Stinner91e1bc12020-07-03 14:15:53 +020011201 }
Victor Stinner74419f02020-07-03 11:35:37 +020011202 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000011203}
Martin v. Löwis5b222132007-06-10 09:51:05 +000011204
Neal Norwitzdb4115f2008-03-31 04:20:05 +000011205/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
11206mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000011207{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030011208 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000011209 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050011210
Steve Dowerb82e17e2019-05-23 08:45:22 -070011211 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
11212 return NULL;
11213 }
11214
Victor Stinner5cf47822020-11-02 22:03:28 +010011215 struct ast_state *state = get_ast_state();
11216 if (state == NULL) {
11217 return NULL;
11218 }
11219
Victor Stinner74419f02020-07-03 11:35:37 +020011220 PyObject *req_type[3];
11221 req_type[0] = state->Module_type;
11222 req_type[1] = state->Expression_type;
11223 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050011224
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080011225 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000011226
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000011227 isinstance = PyObject_IsInstance(ast, req_type[mode]);
11228 if (isinstance == -1)
11229 return NULL;
11230 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000011231 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070011232 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000011233 return NULL;
11234 }
Dong-hee Naa05fcd32019-10-10 16:41:26 +090011235
11236 mod_ty res = NULL;
Victor Stinner74419f02020-07-03 11:35:37 +020011237 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000011238 return NULL;
11239 else
11240 return res;
11241}
11242
11243int PyAST_Check(PyObject* obj)
11244{
Victor Stinner5cf47822020-11-02 22:03:28 +010011245 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020011246 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020011247 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020011248 }
Victor Stinner74419f02020-07-03 11:35:37 +020011249 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000011250}
11251
Martin v. Löwis5b222132007-06-10 09:51:05 +000011252