Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1 | // File automatically generated by Parser/asdl_c.py. |
2 | |||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3 | #include "Python.h" |
Victor Stinner | d36d6a9 | 2021-04-07 13:01:09 +0200 | [diff] [blame] | 4 | #include "pycore_ast.h" |
Victor Stinner | e0bf70d | 2021-03-18 02:46:06 +0100 | [diff] [blame] | 5 | #include "pycore_ast_state.h" // struct ast_state |
6 | #include "pycore_interp.h" // _PyInterpreterState.ast | ||||
7 | #include "pycore_pystate.h" // _PyInterpreterState_GET() | ||||
Victor Stinner | d36d6a9 | 2021-04-07 13:01:09 +0200 | [diff] [blame] | 8 | #include "structmember.h" |
9 | #include <stddef.h> | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 10 | |
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 11 | // Forward declaration |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 12 | static int init_types(struct ast_state *state); |
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 13 | |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 14 | static struct ast_state* |
15 | get_ast_state(void) | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 16 | { |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 17 | PyInterpreterState *interp = _PyInterpreterState_GET(); |
18 | struct ast_state *state = &interp->ast; | ||||
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 19 | if (!init_types(state)) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 20 | return NULL; |
21 | } | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 22 | return state; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 23 | } |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 24 | |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 25 | void _PyAST_Fini(PyInterpreterState *interp) |
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 26 | { |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 27 | struct ast_state *state = &interp->ast; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 28 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 29 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 108 | Py_CLEAR(state->MatchAs_type); |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 109 | Py_CLEAR(state->MatchClass_type); |
110 | Py_CLEAR(state->MatchMapping_type); | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 111 | Py_CLEAR(state->MatchOr_type); |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 112 | Py_CLEAR(state->MatchSequence_type); |
113 | Py_CLEAR(state->MatchSingleton_type); | ||||
114 | Py_CLEAR(state->MatchStar_type); | ||||
115 | Py_CLEAR(state->MatchValue_type); | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 116 | Py_CLEAR(state->Match_type); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 117 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 163 | Py_CLEAR(state->__match_args__); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 164 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 180 | Py_CLEAR(state->cases); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 181 | Py_CLEAR(state->cause); |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 182 | Py_CLEAR(state->cls); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 183 | Py_CLEAR(state->cmpop_type); |
184 | Py_CLEAR(state->col_offset); | ||||
185 | Py_CLEAR(state->comparators); | ||||
186 | Py_CLEAR(state->comprehension_type); | ||||
187 | Py_CLEAR(state->context_expr); | ||||
188 | Py_CLEAR(state->conversion); | ||||
189 | Py_CLEAR(state->ctx); | ||||
190 | Py_CLEAR(state->decorator_list); | ||||
191 | Py_CLEAR(state->defaults); | ||||
192 | Py_CLEAR(state->elt); | ||||
193 | Py_CLEAR(state->elts); | ||||
194 | Py_CLEAR(state->end_col_offset); | ||||
195 | Py_CLEAR(state->end_lineno); | ||||
196 | Py_CLEAR(state->exc); | ||||
197 | Py_CLEAR(state->excepthandler_type); | ||||
198 | Py_CLEAR(state->expr_context_type); | ||||
199 | Py_CLEAR(state->expr_type); | ||||
200 | Py_CLEAR(state->finalbody); | ||||
201 | Py_CLEAR(state->format_spec); | ||||
202 | Py_CLEAR(state->func); | ||||
203 | Py_CLEAR(state->generators); | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 204 | Py_CLEAR(state->guard); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 205 | 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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 218 | Py_CLEAR(state->kwd_attrs); |
219 | Py_CLEAR(state->kwd_patterns); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 220 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 225 | Py_CLEAR(state->match_case_type); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 226 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 237 | Py_CLEAR(state->pattern); |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 238 | Py_CLEAR(state->pattern_type); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 239 | Py_CLEAR(state->patterns); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 240 | Py_CLEAR(state->posonlyargs); |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 241 | Py_CLEAR(state->rest); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 242 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 248 | Py_CLEAR(state->subject); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 249 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 263 | |
Victor Stinner | e0bf70d | 2021-03-18 02:46:06 +0100 | [diff] [blame] | 264 | #if !defined(NDEBUG) |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 265 | state->initialized = -1; |
266 | #else | ||||
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 267 | state->initialized = 0; |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 268 | #endif |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 269 | } |
270 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 271 | static int init_identifiers(struct ast_state *state) |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 272 | { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 273 | if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0; |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 274 | if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0; |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 275 | if ((state->__match_args__ = PyUnicode_InternFromString("__match_args__")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 276 | if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 277 | 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 Storchaka | bace59d | 2020-03-22 20:33:34 +0200 | [diff] [blame] | 284 | if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 285 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 288 | if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 289 | if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0; |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 290 | if ((state->cls = PyUnicode_InternFromString("cls")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 291 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 298 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 307 | if ((state->guard = PyUnicode_InternFromString("guard")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 308 | 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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 320 | if ((state->kwd_attrs = PyUnicode_InternFromString("kwd_attrs")) == NULL) return 0; |
321 | if ((state->kwd_patterns = PyUnicode_InternFromString("kwd_patterns")) == NULL) return 0; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 322 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 336 | if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return 0; |
337 | if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return 0; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 338 | if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0; |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 339 | if ((state->rest = PyUnicode_InternFromString("rest")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 340 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 345 | if ((state->subject = PyUnicode_InternFromString("subject")) == NULL) return 0; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 346 | 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 Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 360 | GENERATE_ASDL_SEQ_CONSTRUCTOR(mod, mod_ty) |
361 | GENERATE_ASDL_SEQ_CONSTRUCTOR(stmt, stmt_ty) | ||||
362 | GENERATE_ASDL_SEQ_CONSTRUCTOR(expr, expr_ty) | ||||
363 | GENERATE_ASDL_SEQ_CONSTRUCTOR(comprehension, comprehension_ty) | ||||
364 | GENERATE_ASDL_SEQ_CONSTRUCTOR(excepthandler, excepthandler_ty) | ||||
365 | GENERATE_ASDL_SEQ_CONSTRUCTOR(arguments, arguments_ty) | ||||
366 | GENERATE_ASDL_SEQ_CONSTRUCTOR(arg, arg_ty) | ||||
367 | GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty) | ||||
368 | GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty) | ||||
369 | GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty) | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 370 | GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty) |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 371 | GENERATE_ASDL_SEQ_CONSTRUCTOR(pattern, pattern_ty) |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 372 | GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty) |
373 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 374 | static PyObject* ast2obj_mod(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 375 | static const char * const Module_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 376 | "body", |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 377 | "type_ignores", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 378 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 379 | static const char * const Interactive_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 380 | "body", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 381 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 382 | static const char * const Expression_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 383 | "body", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 384 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 385 | static const char * const FunctionType_fields[]={ |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 386 | "argtypes", |
387 | "returns", | ||||
388 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 389 | static const char * const stmt_attributes[] = { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 390 | "lineno", |
391 | "col_offset", | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 392 | "end_lineno", |
393 | "end_col_offset", | ||||
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 394 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 395 | static PyObject* ast2obj_stmt(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 396 | static const char * const FunctionDef_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 397 | "name", |
398 | "args", | ||||
399 | "body", | ||||
400 | "decorator_list", | ||||
401 | "returns", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 402 | "type_comment", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 403 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 404 | static const char * const AsyncFunctionDef_fields[]={ |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 405 | "name", |
406 | "args", | ||||
407 | "body", | ||||
408 | "decorator_list", | ||||
409 | "returns", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 410 | "type_comment", |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 411 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 412 | static const char * const ClassDef_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 413 | "name", |
414 | "bases", | ||||
415 | "keywords", | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 416 | "body", |
417 | "decorator_list", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 418 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 419 | static const char * const Return_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 420 | "value", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 421 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 422 | static const char * const Delete_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 423 | "targets", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 424 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 425 | static const char * const Assign_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 426 | "targets", |
427 | "value", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 428 | "type_comment", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 429 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 430 | static const char * const AugAssign_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 431 | "target", |
432 | "op", | ||||
433 | "value", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 434 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 435 | static const char * const AnnAssign_fields[]={ |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 436 | "target", |
437 | "annotation", | ||||
438 | "value", | ||||
439 | "simple", | ||||
440 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 441 | static const char * const For_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 442 | "target", |
443 | "iter", | ||||
444 | "body", | ||||
445 | "orelse", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 446 | "type_comment", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 447 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 448 | static const char * const AsyncFor_fields[]={ |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 449 | "target", |
450 | "iter", | ||||
451 | "body", | ||||
452 | "orelse", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 453 | "type_comment", |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 454 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 455 | static const char * const While_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 456 | "test", |
457 | "body", | ||||
458 | "orelse", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 459 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 460 | static const char * const If_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 461 | "test", |
462 | "body", | ||||
463 | "orelse", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 464 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 465 | static const char * const With_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 466 | "items", |
467 | "body", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 468 | "type_comment", |
Guido van Rossum | c2e2074 | 2006-02-27 22:32:47 +0000 | [diff] [blame] | 469 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 470 | static const char * const AsyncWith_fields[]={ |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 471 | "items", |
472 | "body", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 473 | "type_comment", |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 474 | }; |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 475 | static const char * const Match_fields[]={ |
476 | "subject", | ||||
477 | "cases", | ||||
478 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 479 | static const char * const Raise_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 480 | "exc", |
481 | "cause", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 482 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 483 | static const char * const Try_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 484 | "body", |
485 | "handlers", | ||||
486 | "orelse", | ||||
487 | "finalbody", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 488 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 489 | static const char * const Assert_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 490 | "test", |
491 | "msg", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 492 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 493 | static const char * const Import_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 494 | "names", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 495 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 496 | static const char * const ImportFrom_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 497 | "module", |
498 | "names", | ||||
499 | "level", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 500 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 501 | static const char * const Global_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 502 | "names", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 503 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 504 | static const char * const Nonlocal_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 505 | "names", |
Jeremy Hylton | 81e9502 | 2007-02-27 06:50:52 +0000 | [diff] [blame] | 506 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 507 | static const char * const Expr_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 508 | "value", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 509 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 510 | static const char * const expr_attributes[] = { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 511 | "lineno", |
512 | "col_offset", | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 513 | "end_lineno", |
514 | "end_col_offset", | ||||
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 515 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 516 | static PyObject* ast2obj_expr(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 517 | static const char * const BoolOp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 518 | "op", |
519 | "values", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 520 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 521 | static const char * const NamedExpr_fields[]={ |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 522 | "target", |
523 | "value", | ||||
524 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 525 | static const char * const BinOp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 526 | "left", |
527 | "op", | ||||
528 | "right", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 529 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 530 | static const char * const UnaryOp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 531 | "op", |
532 | "operand", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 533 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 534 | static const char * const Lambda_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 535 | "args", |
536 | "body", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 537 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 538 | static const char * const IfExp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 539 | "test", |
540 | "body", | ||||
541 | "orelse", | ||||
Thomas Wouters | dca3b9c | 2006-02-27 00:24:13 +0000 | [diff] [blame] | 542 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 543 | static const char * const Dict_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 544 | "keys", |
545 | "values", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 546 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 547 | static const char * const Set_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 548 | "elts", |
Guido van Rossum | 86e58e2 | 2006-08-28 15:27:34 +0000 | [diff] [blame] | 549 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 550 | static const char * const ListComp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 551 | "elt", |
552 | "generators", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 553 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 554 | static const char * const SetComp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 555 | "elt", |
556 | "generators", | ||||
Nick Coghlan | 650f0d0 | 2007-04-15 12:05:43 +0000 | [diff] [blame] | 557 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 558 | static const char * const DictComp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 559 | "key", |
560 | "value", | ||||
561 | "generators", | ||||
Guido van Rossum | 992d4a3 | 2007-07-11 13:09:30 +0000 | [diff] [blame] | 562 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 563 | static const char * const GeneratorExp_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 564 | "elt", |
565 | "generators", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 566 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 567 | static const char * const Await_fields[]={ |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 568 | "value", |
569 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 570 | static const char * const Yield_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 571 | "value", |
Benjamin Peterson | 527c622 | 2012-01-14 08:58:23 -0500 | [diff] [blame] | 572 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 573 | static const char * const YieldFrom_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 574 | "value", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 575 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 576 | static const char * const Compare_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 577 | "left", |
578 | "ops", | ||||
579 | "comparators", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 580 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 581 | static const char * const Call_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 582 | "func", |
583 | "args", | ||||
584 | "keywords", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 585 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 586 | static const char * const FormattedValue_fields[]={ |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 587 | "value", |
588 | "conversion", | ||||
589 | "format_spec", | ||||
590 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 591 | static const char * const JoinedStr_fields[]={ |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 592 | "values", |
593 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 594 | static const char * const Constant_fields[]={ |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 595 | "value", |
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 596 | "kind", |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 597 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 598 | static const char * const Attribute_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 599 | "value", |
600 | "attr", | ||||
601 | "ctx", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 602 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 603 | static const char * const Subscript_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 604 | "value", |
605 | "slice", | ||||
606 | "ctx", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 607 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 608 | static const char * const Starred_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 609 | "value", |
610 | "ctx", | ||||
Guido van Rossum | 0368b72 | 2007-05-11 16:50:42 +0000 | [diff] [blame] | 611 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 612 | static const char * const Name_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 613 | "id", |
614 | "ctx", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 615 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 616 | static const char * const List_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 617 | "elts", |
618 | "ctx", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 619 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 620 | static const char * const Tuple_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 621 | "elts", |
622 | "ctx", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 623 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 624 | static const char * const Slice_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 625 | "lower", |
626 | "upper", | ||||
627 | "step", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 628 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 629 | static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty); |
630 | static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty); | ||||
631 | static PyObject* ast2obj_operator(struct ast_state *state, operator_ty); | ||||
632 | static PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty); | ||||
633 | static PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty); | ||||
634 | static PyObject* ast2obj_comprehension(struct ast_state *state, void*); | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 635 | static const char * const comprehension_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 636 | "target", |
637 | "iter", | ||||
638 | "ifs", | ||||
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 639 | "is_async", |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 640 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 641 | static const char * const excepthandler_attributes[] = { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 642 | "lineno", |
643 | "col_offset", | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 644 | "end_lineno", |
645 | "end_col_offset", | ||||
Neal Norwitz | ad74aa8 | 2008-03-31 05:14:30 +0000 | [diff] [blame] | 646 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 647 | static PyObject* ast2obj_excepthandler(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 648 | static const char * const ExceptHandler_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 649 | "type", |
650 | "name", | ||||
651 | "body", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 652 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 653 | static PyObject* ast2obj_arguments(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 654 | static const char * const arguments_fields[]={ |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 655 | "posonlyargs", |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 656 | "args", |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 657 | "vararg", |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 658 | "kwonlyargs", |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 659 | "kw_defaults", |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 660 | "kwarg", |
661 | "defaults", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 662 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 663 | static PyObject* ast2obj_arg(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 664 | static const char * const arg_attributes[] = { |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 665 | "lineno", |
666 | "col_offset", | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 667 | "end_lineno", |
668 | "end_col_offset", | ||||
Benjamin Peterson | cda75be | 2013-03-18 10:48:58 -0700 | [diff] [blame] | 669 | }; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 670 | static const char * const arg_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 671 | "arg", |
672 | "annotation", | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 673 | "type_comment", |
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 674 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 675 | static PyObject* ast2obj_keyword(struct ast_state *state, void*); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 676 | static const char * const keyword_attributes[] = { |
677 | "lineno", | ||||
678 | "col_offset", | ||||
679 | "end_lineno", | ||||
680 | "end_col_offset", | ||||
681 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 682 | static const char * const keyword_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 683 | "arg", |
684 | "value", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 685 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 686 | static PyObject* ast2obj_alias(struct ast_state *state, void*); |
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 687 | static const char * const alias_attributes[] = { |
688 | "lineno", | ||||
689 | "col_offset", | ||||
690 | "end_lineno", | ||||
691 | "end_col_offset", | ||||
692 | }; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 693 | static const char * const alias_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 694 | "name", |
695 | "asname", | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 696 | }; |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 697 | static PyObject* ast2obj_withitem(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 698 | static const char * const withitem_fields[]={ |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 699 | "context_expr", |
700 | "optional_vars", | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 701 | }; |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 702 | static PyObject* ast2obj_match_case(struct ast_state *state, void*); |
703 | static const char * const match_case_fields[]={ | ||||
704 | "pattern", | ||||
705 | "guard", | ||||
706 | "body", | ||||
707 | }; | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 708 | static const char * const pattern_attributes[] = { |
709 | "lineno", | ||||
710 | "col_offset", | ||||
711 | "end_lineno", | ||||
712 | "end_col_offset", | ||||
713 | }; | ||||
714 | static PyObject* ast2obj_pattern(struct ast_state *state, void*); | ||||
715 | static const char * const MatchValue_fields[]={ | ||||
716 | "value", | ||||
717 | }; | ||||
718 | static const char * const MatchSingleton_fields[]={ | ||||
719 | "value", | ||||
720 | }; | ||||
721 | static const char * const MatchSequence_fields[]={ | ||||
722 | "patterns", | ||||
723 | }; | ||||
724 | static const char * const MatchMapping_fields[]={ | ||||
725 | "keys", | ||||
726 | "patterns", | ||||
727 | "rest", | ||||
728 | }; | ||||
729 | static const char * const MatchClass_fields[]={ | ||||
730 | "cls", | ||||
731 | "patterns", | ||||
732 | "kwd_attrs", | ||||
733 | "kwd_patterns", | ||||
734 | }; | ||||
735 | static const char * const MatchStar_fields[]={ | ||||
736 | "name", | ||||
737 | }; | ||||
738 | static const char * const MatchAs_fields[]={ | ||||
739 | "pattern", | ||||
740 | "name", | ||||
741 | }; | ||||
742 | static const char * const MatchOr_fields[]={ | ||||
743 | "patterns", | ||||
744 | }; | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 745 | static PyObject* ast2obj_type_ignore(struct ast_state *state, void*); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 746 | static const char * const TypeIgnore_fields[]={ |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 747 | "lineno", |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 748 | "tag", |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 749 | }; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 750 | |
751 | |||||
INADA Naoki | fc48908 | 2017-01-25 22:33:43 +0900 | [diff] [blame] | 752 | |
Benjamin Peterson | 7e0dbfb | 2012-03-12 09:46:44 -0700 | [diff] [blame] | 753 | typedef struct { |
Victor Stinner | 45e50de | 2012-03-13 01:17:31 +0100 | [diff] [blame] | 754 | PyObject_HEAD |
Benjamin Peterson | 7e0dbfb | 2012-03-12 09:46:44 -0700 | [diff] [blame] | 755 | PyObject *dict; |
756 | } AST_object; | ||||
757 | |||||
Benjamin Peterson | 1767e02 | 2012-03-14 21:50:29 -0500 | [diff] [blame] | 758 | static void |
759 | ast_dealloc(AST_object *self) | ||||
760 | { | ||||
INADA Naoki | a6296d3 | 2017-08-24 14:55:17 +0900 | [diff] [blame] | 761 | /* bpo-31095: UnTrack is needed before calling any callbacks */ |
Eddie Elizondo | 0247e80 | 2019-09-14 09:38:17 -0400 | [diff] [blame] | 762 | PyTypeObject *tp = Py_TYPE(self); |
INADA Naoki | a6296d3 | 2017-08-24 14:55:17 +0900 | [diff] [blame] | 763 | PyObject_GC_UnTrack(self); |
Benjamin Peterson | 1767e02 | 2012-03-14 21:50:29 -0500 | [diff] [blame] | 764 | Py_CLEAR(self->dict); |
Eddie Elizondo | 0247e80 | 2019-09-14 09:38:17 -0400 | [diff] [blame] | 765 | freefunc free_func = PyType_GetSlot(tp, Py_tp_free); |
766 | assert(free_func != NULL); | ||||
767 | free_func(self); | ||||
768 | Py_DECREF(tp); | ||||
Benjamin Peterson | 1767e02 | 2012-03-14 21:50:29 -0500 | [diff] [blame] | 769 | } |
770 | |||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 771 | static int |
Benjamin Peterson | 8107176 | 2012-07-08 11:03:46 -0700 | [diff] [blame] | 772 | ast_traverse(AST_object *self, visitproc visit, void *arg) |
773 | { | ||||
Pablo Galindo | 1cf15af | 2020-05-27 10:03:38 +0100 | [diff] [blame] | 774 | Py_VISIT(Py_TYPE(self)); |
Benjamin Peterson | 8107176 | 2012-07-08 11:03:46 -0700 | [diff] [blame] | 775 | Py_VISIT(self->dict); |
776 | return 0; | ||||
777 | } | ||||
778 | |||||
Serhiy Storchaka | a5c4228 | 2018-05-31 07:34:34 +0300 | [diff] [blame] | 779 | static int |
Benjamin Peterson | 8107176 | 2012-07-08 11:03:46 -0700 | [diff] [blame] | 780 | ast_clear(AST_object *self) |
781 | { | ||||
782 | Py_CLEAR(self->dict); | ||||
Serhiy Storchaka | a5c4228 | 2018-05-31 07:34:34 +0300 | [diff] [blame] | 783 | return 0; |
Benjamin Peterson | 8107176 | 2012-07-08 11:03:46 -0700 | [diff] [blame] | 784 | } |
785 | |||||
786 | static int | ||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 787 | ast_type_init(PyObject *self, PyObject *args, PyObject *kw) |
788 | { | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 789 | struct ast_state *state = get_ast_state(); |
Victor Stinner | 1f76453 | 2020-07-04 23:18:15 +0200 | [diff] [blame] | 790 | if (state == NULL) { |
791 | return -1; | ||||
792 | } | ||||
793 | |||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 794 | Py_ssize_t i, numfields = 0; |
795 | int res = -1; | ||||
796 | PyObject *key, *value, *fields; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 797 | if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 798 | goto cleanup; |
799 | } | ||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 800 | if (fields) { |
801 | numfields = PySequence_Size(fields); | ||||
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 802 | if (numfields == -1) { |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 803 | goto cleanup; |
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 804 | } |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 805 | } |
INADA Naoki | 4c78c52 | 2017-02-24 02:48:17 +0900 | [diff] [blame] | 806 | |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 807 | res = 0; /* if no error occurs, this stays 0 to the end */ |
INADA Naoki | 4c78c52 | 2017-02-24 02:48:17 +0900 | [diff] [blame] | 808 | if (numfields < PyTuple_GET_SIZE(args)) { |
809 | PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most " | ||||
810 | "%zd positional argument%s", | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 811 | _PyType_Name(Py_TYPE(self)), |
INADA Naoki | 4c78c52 | 2017-02-24 02:48:17 +0900 | [diff] [blame] | 812 | 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 Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 820 | res = -1; |
821 | goto cleanup; | ||||
822 | } | ||||
INADA Naoki | 4c78c52 | 2017-02-24 02:48:17 +0900 | [diff] [blame] | 823 | res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i)); |
824 | Py_DECREF(name); | ||||
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 825 | if (res < 0) { |
INADA Naoki | 4c78c52 | 2017-02-24 02:48:17 +0900 | [diff] [blame] | 826 | goto cleanup; |
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 827 | } |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 828 | } |
829 | if (kw) { | ||||
830 | i = 0; /* needed by PyDict_Next */ | ||||
831 | while (PyDict_Next(kw, &i, &key, &value)) { | ||||
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 832 | int contains = PySequence_Contains(fields, key); |
833 | if (contains == -1) { | ||||
834 | res = -1; | ||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 835 | goto cleanup; |
Rémi Lapeyre | c73914a | 2020-05-24 23:12:57 +0200 | [diff] [blame] | 836 | } 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 Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 854 | } |
855 | } | ||||
856 | cleanup: | ||||
857 | Py_XDECREF(fields); | ||||
858 | return res; | ||||
859 | } | ||||
860 | |||||
Neal Norwitz | ee9b10a | 2008-03-31 05:29:39 +0000 | [diff] [blame] | 861 | /* Pickling support */ |
862 | static PyObject * | ||||
863 | ast_type_reduce(PyObject *self, PyObject *unused) | ||||
864 | { | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 865 | struct ast_state *state = get_ast_state(); |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 866 | if (state == NULL) { |
867 | return NULL; | ||||
868 | } | ||||
869 | |||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 870 | PyObject *dict; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 871 | if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 872 | return NULL; |
Neal Norwitz | ee9b10a | 2008-03-31 05:29:39 +0000 | [diff] [blame] | 873 | } |
874 | if (dict) { | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 875 | return Py_BuildValue("O()N", Py_TYPE(self), dict); |
Neal Norwitz | ee9b10a | 2008-03-31 05:29:39 +0000 | [diff] [blame] | 876 | } |
877 | return Py_BuildValue("O()", Py_TYPE(self)); | ||||
878 | } | ||||
879 | |||||
Eddie Elizondo | 3368f3c | 2019-09-19 09:29:05 -0700 | [diff] [blame] | 880 | static PyMemberDef ast_type_members[] = { |
881 | {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY}, | ||||
882 | {NULL} /* Sentinel */ | ||||
883 | }; | ||||
884 | |||||
Neal Norwitz | ee9b10a | 2008-03-31 05:29:39 +0000 | [diff] [blame] | 885 | static PyMethodDef ast_type_methods[] = { |
886 | {"__reduce__", ast_type_reduce, METH_NOARGS, NULL}, | ||||
887 | {NULL} | ||||
888 | }; | ||||
889 | |||||
Benjamin Peterson | 7e0dbfb | 2012-03-12 09:46:44 -0700 | [diff] [blame] | 890 | static PyGetSetDef ast_type_getsets[] = { |
891 | {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict}, | ||||
892 | {NULL} | ||||
893 | }; | ||||
894 | |||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 895 | static 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 Elizondo | 3368f3c | 2019-09-19 09:29:05 -0700 | [diff] [blame] | 901 | {Py_tp_members, ast_type_members}, |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 902 | {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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 907 | {Py_tp_free, PyObject_GC_Del}, |
908 | {0, 0}, | ||||
909 | }; | ||||
910 | |||||
911 | static PyType_Spec AST_type_spec = { | ||||
Serhiy Storchaka | bace59d | 2020-03-22 20:33:34 +0200 | [diff] [blame] | 912 | "ast.AST", |
Benjamin Peterson | 7e0dbfb | 2012-03-12 09:46:44 -0700 | [diff] [blame] | 913 | sizeof(AST_object), |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 914 | 0, |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 915 | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, |
916 | AST_type_slots | ||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 917 | }; |
918 | |||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 919 | static PyObject * |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 920 | make_type(struct ast_state *state, const char *type, PyObject* base, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 921 | const char* const* fields, int num_fields, const char *doc) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 922 | { |
923 | PyObject *fnames, *result; | ||||
924 | int i; | ||||
Neal Norwitz | ee9b10a | 2008-03-31 05:29:39 +0000 | [diff] [blame] | 925 | fnames = PyTuple_New(num_fields); |
926 | if (!fnames) return NULL; | ||||
927 | for (i = 0; i < num_fields; i++) { | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 928 | PyObject *field = PyUnicode_InternFromString(fields[i]); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 929 | if (!field) { |
930 | Py_DECREF(fnames); | ||||
931 | return NULL; | ||||
932 | } | ||||
933 | PyTuple_SET_ITEM(fnames, i, field); | ||||
934 | } | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 935 | result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}", |
INADA Naoki | fc48908 | 2017-01-25 22:33:43 +0900 | [diff] [blame] | 936 | type, base, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 937 | state->_fields, fnames, |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 938 | state->__match_args__, fnames, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 939 | state->__module__, |
940 | state->ast, | ||||
941 | state->__doc__, doc); | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 942 | Py_DECREF(fnames); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 943 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 944 | } |
945 | |||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 946 | static int |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 947 | add_attributes(struct ast_state *state, PyObject *type, const char * const *attrs, int num_fields) |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 948 | { |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 949 | int i, result; |
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 950 | PyObject *s, *l = PyTuple_New(num_fields); |
Benjamin Peterson | 3e5cd1d | 2010-06-27 21:45:24 +0000 | [diff] [blame] | 951 | if (!l) |
952 | return 0; | ||||
953 | for (i = 0; i < num_fields; i++) { | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 954 | s = PyUnicode_InternFromString(attrs[i]); |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 955 | if (!s) { |
956 | Py_DECREF(l); | ||||
957 | return 0; | ||||
958 | } | ||||
Neal Norwitz | 207c9f3 | 2008-03-31 04:42:11 +0000 | [diff] [blame] | 959 | PyTuple_SET_ITEM(l, i, s); |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 960 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 961 | result = PyObject_SetAttr(type, state->_attributes, l) >= 0; |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 962 | Py_DECREF(l); |
963 | return result; | ||||
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 964 | } |
965 | |||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 966 | /* Conversion AST -> Python */ |
967 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 968 | static PyObject* ast2obj_list(struct ast_state *state, asdl_seq *seq, PyObject* (*func)(struct ast_state *state, void*)) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 969 | { |
Benjamin Peterson | 77fa937 | 2012-05-15 10:10:27 -0700 | [diff] [blame] | 970 | Py_ssize_t i, n = asdl_seq_LEN(seq); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 971 | PyObject *result = PyList_New(n); |
972 | PyObject *value; | ||||
973 | if (!result) | ||||
974 | return NULL; | ||||
975 | for (i = 0; i < n; i++) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 976 | value = func(state, asdl_seq_GET_UNTYPED(seq, i)); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 977 | if (!value) { |
978 | Py_DECREF(result); | ||||
979 | return NULL; | ||||
980 | } | ||||
981 | PyList_SET_ITEM(result, i, value); | ||||
982 | } | ||||
983 | return result; | ||||
984 | } | ||||
985 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 986 | static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 987 | { |
988 | if (!o) | ||||
989 | o = Py_None; | ||||
990 | Py_INCREF((PyObject*)o); | ||||
991 | return (PyObject*)o; | ||||
992 | } | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 993 | #define ast2obj_constant ast2obj_object |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 994 | #define ast2obj_identifier ast2obj_object |
995 | #define ast2obj_string ast2obj_object | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 996 | |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 997 | static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b) |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 998 | { |
Christian Heimes | 217cfd1 | 2007-12-02 14:31:20 +0000 | [diff] [blame] | 999 | return PyLong_FromLong(b); |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 1000 | } |
1001 | |||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1002 | /* Conversion Python -> AST */ |
1003 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1004 | static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1005 | { |
1006 | if (obj == Py_None) | ||||
1007 | obj = NULL; | ||||
Christian Heimes | 70c94e7 | 2013-07-27 00:33:13 +0200 | [diff] [blame] | 1008 | if (obj) { |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1009 | if (_PyArena_AddPyObject(arena, obj) < 0) { |
Christian Heimes | 70c94e7 | 2013-07-27 00:33:13 +0200 | [diff] [blame] | 1010 | *out = NULL; |
1011 | return -1; | ||||
1012 | } | ||||
1013 | Py_INCREF(obj); | ||||
1014 | } | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1015 | *out = obj; |
1016 | return 0; | ||||
1017 | } | ||||
1018 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1019 | static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena) |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 1020 | { |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1021 | if (_PyArena_AddPyObject(arena, obj) < 0) { |
Serhiy Storchaka | 3f22811 | 2018-09-27 17:42:37 +0300 | [diff] [blame] | 1022 | *out = NULL; |
1023 | return -1; | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 1024 | } |
Serhiy Storchaka | 3f22811 | 2018-09-27 17:42:37 +0300 | [diff] [blame] | 1025 | Py_INCREF(obj); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 1026 | *out = obj; |
1027 | return 0; | ||||
1028 | } | ||||
1029 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1030 | static int obj2ast_identifier(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena) |
Benjamin Peterson | 2193d2b | 2011-07-22 10:50:23 -0500 | [diff] [blame] | 1031 | { |
Benjamin Peterson | 180e635 | 2011-07-22 11:09:07 -0500 | [diff] [blame] | 1032 | if (!PyUnicode_CheckExact(obj) && obj != Py_None) { |
1033 | PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str"); | ||||
Benjamin Peterson | 2193d2b | 2011-07-22 10:50:23 -0500 | [diff] [blame] | 1034 | return 1; |
1035 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1036 | return obj2ast_object(state, obj, out, arena); |
Benjamin Peterson | 2193d2b | 2011-07-22 10:50:23 -0500 | [diff] [blame] | 1037 | } |
1038 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1039 | static int obj2ast_string(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1040 | { |
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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1045 | return obj2ast_object(state, obj, out, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1046 | } |
1047 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1048 | static int obj2ast_int(struct ast_state* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1049 | { |
1050 | int i; | ||||
1051 | if (!PyLong_Check(obj)) { | ||||
Amaury Forgeot d'Arc | 5e8f810 | 2011-11-22 21:52:30 +0100 | [diff] [blame] | 1052 | PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj); |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1053 | return 1; |
1054 | } | ||||
1055 | |||||
Serhiy Storchaka | 56f6e76 | 2015-09-06 21:25:30 +0300 | [diff] [blame] | 1056 | i = _PyLong_AsInt(obj); |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1057 | if (i == -1 && PyErr_Occurred()) |
1058 | return 1; | ||||
1059 | *out = i; | ||||
1060 | return 0; | ||||
1061 | } | ||||
1062 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1063 | static int add_ast_fields(struct ast_state *state) |
Benjamin Peterson | ce825f1 | 2008-10-24 23:11:02 +0000 | [diff] [blame] | 1064 | { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1065 | PyObject *empty_tuple; |
Benjamin Peterson | ce825f1 | 2008-10-24 23:11:02 +0000 | [diff] [blame] | 1066 | empty_tuple = PyTuple_New(0); |
1067 | if (!empty_tuple || | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1068 | PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 || |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1069 | PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 || |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1070 | PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) { |
Benjamin Peterson | ce825f1 | 2008-10-24 23:11:02 +0000 | [diff] [blame] | 1071 | Py_XDECREF(empty_tuple); |
1072 | return -1; | ||||
1073 | } | ||||
1074 | Py_DECREF(empty_tuple); | ||||
1075 | return 0; | ||||
1076 | } | ||||
1077 | |||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1078 | |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 1079 | |
1080 | static int | ||||
1081 | init_types(struct ast_state *state) | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 1082 | { |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 1083 | // 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1093 | state->AST_type = PyType_FromSpec(&AST_type_spec); |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 1094 | if (!state->AST_type) { |
1095 | return 0; | ||||
1096 | } | ||||
1097 | if (add_ast_fields(state) < 0) { | ||||
1098 | return 0; | ||||
1099 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1100 | state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1101 | "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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1105 | if (!state->mod_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1106 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1109 | "Module(stmt* body, type_ignore* type_ignores)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1110 | if (!state->Module_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1111 | state->Interactive_type = make_type(state, "Interactive", state->mod_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1112 | Interactive_fields, 1, |
1113 | "Interactive(stmt* body)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1114 | if (!state->Interactive_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1115 | state->Expression_type = make_type(state, "Expression", state->mod_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1116 | Expression_fields, 1, |
1117 | "Expression(expr body)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1118 | if (!state->Expression_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1119 | state->FunctionType_type = make_type(state, "FunctionType", |
1120 | state->mod_type, FunctionType_fields, | ||||
1121 | 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1122 | "FunctionType(expr* argtypes, expr returns)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1123 | if (!state->FunctionType_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1124 | state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1125 | "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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1139 | " | Match(expr subject, match_case* cases)\n" |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1140 | " | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1151 | if (!state->stmt_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1152 | if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1153 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1158 | state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1159 | FunctionDef_fields, 6, |
1160 | "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1161 | if (!state->FunctionDef_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1162 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1168 | state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef", |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1169 | state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1170 | AsyncFunctionDef_fields, 6, |
1171 | "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1172 | if (!state->AsyncFunctionDef_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1173 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1179 | state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1180 | ClassDef_fields, 5, |
1181 | "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1182 | if (!state->ClassDef_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1183 | state->Return_type = make_type(state, "Return", state->stmt_type, |
1184 | Return_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1185 | "Return(expr? value)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1186 | if (!state->Return_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1187 | if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1) |
1188 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1189 | state->Delete_type = make_type(state, "Delete", state->stmt_type, |
1190 | Delete_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1191 | "Delete(expr* targets)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1192 | if (!state->Delete_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1193 | state->Assign_type = make_type(state, "Assign", state->stmt_type, |
1194 | Assign_fields, 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1195 | "Assign(expr* targets, expr value, string? type_comment)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1196 | if (!state->Assign_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1197 | if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) == |
1198 | -1) | ||||
1199 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1200 | state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1201 | AugAssign_fields, 3, |
1202 | "AugAssign(expr target, operator op, expr value)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1203 | if (!state->AugAssign_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1204 | state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1205 | AnnAssign_fields, 4, |
1206 | "AnnAssign(expr target, expr annotation, expr? value, int simple)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1207 | if (!state->AnnAssign_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1208 | if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1) |
1209 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1210 | state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1211 | "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1212 | if (!state->For_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1213 | if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1) |
1214 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1215 | state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1216 | AsyncFor_fields, 5, |
1217 | "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1218 | if (!state->AsyncFor_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1219 | if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) == |
1220 | -1) | ||||
1221 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1222 | state->While_type = make_type(state, "While", state->stmt_type, |
1223 | While_fields, 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1224 | "While(expr test, stmt* body, stmt* orelse)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1225 | if (!state->While_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1226 | state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1227 | "If(expr test, stmt* body, stmt* orelse)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1228 | if (!state->If_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1229 | state->With_type = make_type(state, "With", state->stmt_type, With_fields, |
1230 | 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1231 | "With(withitem* items, stmt* body, string? type_comment)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1232 | if (!state->With_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1233 | if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1) |
1234 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1235 | state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1236 | AsyncWith_fields, 3, |
1237 | "AsyncWith(withitem* items, stmt* body, string? type_comment)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1238 | if (!state->AsyncWith_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1239 | if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None) |
1240 | == -1) | ||||
1241 | return 0; | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1242 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1246 | state->Raise_type = make_type(state, "Raise", state->stmt_type, |
1247 | Raise_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1248 | "Raise(expr? exc, expr? cause)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1249 | if (!state->Raise_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1250 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1254 | state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1255 | "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1256 | if (!state->Try_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1257 | state->Assert_type = make_type(state, "Assert", state->stmt_type, |
1258 | Assert_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1259 | "Assert(expr test, expr? msg)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1260 | if (!state->Assert_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1261 | if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1) |
1262 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1263 | state->Import_type = make_type(state, "Import", state->stmt_type, |
1264 | Import_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1265 | "Import(alias* names)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1266 | if (!state->Import_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1267 | state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1268 | ImportFrom_fields, 3, |
1269 | "ImportFrom(identifier? module, alias* names, int? level)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1270 | if (!state->ImportFrom_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1271 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1275 | state->Global_type = make_type(state, "Global", state->stmt_type, |
1276 | Global_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1277 | "Global(identifier* names)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1278 | if (!state->Global_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1279 | state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1280 | Nonlocal_fields, 1, |
1281 | "Nonlocal(identifier* names)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1282 | if (!state->Nonlocal_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1283 | state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields, |
1284 | 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1285 | "Expr(expr value)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1286 | if (!state->Expr_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1287 | state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1288 | "Pass"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1289 | if (!state->Pass_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1290 | state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1291 | "Break"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1292 | if (!state->Break_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1293 | state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL, |
1294 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1295 | "Continue"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1296 | if (!state->Continue_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1297 | state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1298 | "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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 1324 | " | Slice(expr? lower, expr? upper, expr? step)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1325 | if (!state->expr_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1326 | if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1327 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1332 | state->BoolOp_type = make_type(state, "BoolOp", state->expr_type, |
1333 | BoolOp_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1334 | "BoolOp(boolop op, expr* values)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1335 | if (!state->BoolOp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1336 | state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1337 | NamedExpr_fields, 2, |
1338 | "NamedExpr(expr target, expr value)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1339 | if (!state->NamedExpr_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1340 | state->BinOp_type = make_type(state, "BinOp", state->expr_type, |
1341 | BinOp_fields, 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1342 | "BinOp(expr left, operator op, expr right)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1343 | if (!state->BinOp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1344 | state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1345 | UnaryOp_fields, 2, |
1346 | "UnaryOp(unaryop op, expr operand)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1347 | if (!state->UnaryOp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1348 | state->Lambda_type = make_type(state, "Lambda", state->expr_type, |
1349 | Lambda_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1350 | "Lambda(arguments args, expr body)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1351 | if (!state->Lambda_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1352 | state->IfExp_type = make_type(state, "IfExp", state->expr_type, |
1353 | IfExp_fields, 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1354 | "IfExp(expr test, expr body, expr orelse)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1355 | if (!state->IfExp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1356 | state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields, |
1357 | 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1358 | "Dict(expr* keys, expr* values)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1359 | if (!state->Dict_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1360 | state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1361 | "Set(expr* elts)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1362 | if (!state->Set_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1363 | state->ListComp_type = make_type(state, "ListComp", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1364 | ListComp_fields, 2, |
1365 | "ListComp(expr elt, comprehension* generators)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1366 | if (!state->ListComp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1367 | state->SetComp_type = make_type(state, "SetComp", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1368 | SetComp_fields, 2, |
1369 | "SetComp(expr elt, comprehension* generators)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1370 | if (!state->SetComp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1371 | state->DictComp_type = make_type(state, "DictComp", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1372 | DictComp_fields, 3, |
1373 | "DictComp(expr key, expr value, comprehension* generators)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1374 | if (!state->DictComp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1375 | state->GeneratorExp_type = make_type(state, "GeneratorExp", |
1376 | state->expr_type, GeneratorExp_fields, | ||||
1377 | 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1378 | "GeneratorExp(expr elt, comprehension* generators)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1379 | if (!state->GeneratorExp_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1380 | state->Await_type = make_type(state, "Await", state->expr_type, |
1381 | Await_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1382 | "Await(expr value)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1383 | if (!state->Await_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1384 | state->Yield_type = make_type(state, "Yield", state->expr_type, |
1385 | Yield_fields, 1, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1386 | "Yield(expr? value)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1387 | if (!state->Yield_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1388 | if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1) |
1389 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1390 | state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1391 | YieldFrom_fields, 1, |
1392 | "YieldFrom(expr value)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1393 | if (!state->YieldFrom_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1394 | state->Compare_type = make_type(state, "Compare", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1395 | Compare_fields, 3, |
1396 | "Compare(expr left, cmpop* ops, expr* comparators)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1397 | if (!state->Compare_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1398 | state->Call_type = make_type(state, "Call", state->expr_type, Call_fields, |
1399 | 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1400 | "Call(expr func, expr* args, keyword* keywords)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1401 | if (!state->Call_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1402 | state->FormattedValue_type = make_type(state, "FormattedValue", |
1403 | state->expr_type, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1404 | FormattedValue_fields, 3, |
1405 | "FormattedValue(expr value, int? conversion, expr? format_spec)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1406 | if (!state->FormattedValue_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1407 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1413 | state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1414 | JoinedStr_fields, 1, |
1415 | "JoinedStr(expr* values)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1416 | if (!state->JoinedStr_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1417 | state->Constant_type = make_type(state, "Constant", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1418 | Constant_fields, 2, |
1419 | "Constant(constant value, string? kind)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1420 | if (!state->Constant_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1421 | if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1) |
1422 | return 0; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1423 | state->Attribute_type = make_type(state, "Attribute", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1424 | Attribute_fields, 3, |
1425 | "Attribute(expr value, identifier attr, expr_context ctx)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1426 | if (!state->Attribute_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1427 | state->Subscript_type = make_type(state, "Subscript", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1428 | Subscript_fields, 3, |
1429 | "Subscript(expr value, expr slice, expr_context ctx)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1430 | if (!state->Subscript_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1431 | state->Starred_type = make_type(state, "Starred", state->expr_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1432 | Starred_fields, 2, |
1433 | "Starred(expr value, expr_context ctx)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1434 | if (!state->Starred_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1435 | state->Name_type = make_type(state, "Name", state->expr_type, Name_fields, |
1436 | 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1437 | "Name(identifier id, expr_context ctx)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1438 | if (!state->Name_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1439 | state->List_type = make_type(state, "List", state->expr_type, List_fields, |
1440 | 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1441 | "List(expr* elts, expr_context ctx)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1442 | if (!state->List_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1443 | state->Tuple_type = make_type(state, "Tuple", state->expr_type, |
1444 | Tuple_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1445 | "Tuple(expr* elts, expr_context ctx)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1446 | if (!state->Tuple_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1447 | state->Slice_type = make_type(state, "Slice", state->expr_type, |
1448 | Slice_fields, 3, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1449 | "Slice(expr? lower, expr? upper, expr? step)"); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 1450 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1457 | state->expr_context_type = make_type(state, "expr_context", |
1458 | state->AST_type, NULL, 0, | ||||
Serhiy Storchaka | 6b97598 | 2020-03-17 23:41:08 +0200 | [diff] [blame] | 1459 | "expr_context = Load | Store | Del"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1460 | if (!state->expr_context_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1461 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1464 | "Load"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1465 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1469 | state->Store_type = make_type(state, "Store", state->expr_context_type, |
1470 | NULL, 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1471 | "Store"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1472 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1476 | state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1477 | "Del"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1478 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1482 | state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1483 | "boolop = And | Or"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1484 | if (!state->boolop_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1485 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1487 | "And"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1488 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1492 | state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1493 | "Or"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1494 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1498 | state->operator_type = make_type(state, "operator", state->AST_type, NULL, |
1499 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1500 | "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1501 | if (!state->operator_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1502 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1504 | "Add"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1505 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1509 | state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1510 | "Sub"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1511 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1515 | state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1516 | "Mult"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1517 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1521 | state->MatMult_type = make_type(state, "MatMult", state->operator_type, |
1522 | NULL, 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1523 | "MatMult"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1524 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1529 | state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1530 | "Div"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1531 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1535 | state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1536 | "Mod"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1537 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1541 | state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1542 | "Pow"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1543 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1547 | state->LShift_type = make_type(state, "LShift", state->operator_type, NULL, |
1548 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1549 | "LShift"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1550 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1555 | state->RShift_type = make_type(state, "RShift", state->operator_type, NULL, |
1556 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1557 | "RShift"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1558 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1563 | state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1564 | "BitOr"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1565 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1569 | state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL, |
1570 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1571 | "BitXor"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1572 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1577 | state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL, |
1578 | 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1579 | "BitAnd"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1580 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1585 | state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type, |
1586 | NULL, 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1587 | "FloorDiv"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1588 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1593 | state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1594 | "unaryop = Invert | Not | UAdd | USub"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1595 | if (!state->unaryop_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1596 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1599 | "Invert"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1600 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1605 | state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1606 | "Not"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1607 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1611 | state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1612 | "UAdd"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1613 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1617 | state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1618 | "USub"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1619 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1623 | state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1624 | "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1625 | if (!state->cmpop_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1626 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1628 | "Eq"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1629 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1633 | state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1634 | "NotEq"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1635 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1639 | state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1640 | "Lt"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1641 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1645 | state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1646 | "LtE"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1647 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1651 | state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1652 | "Gt"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1653 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1657 | state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1658 | "GtE"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1659 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1663 | state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1664 | "Is"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1665 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1669 | state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1670 | "IsNot"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1671 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1675 | state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1676 | "In"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1677 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1681 | state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1682 | "NotIn"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1683 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1687 | state->comprehension_type = make_type(state, "comprehension", |
1688 | state->AST_type, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1689 | comprehension_fields, 4, |
1690 | "comprehension(expr target, expr iter, expr* ifs, int is_async)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1691 | if (!state->comprehension_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1692 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1695 | "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1696 | if (!state->excepthandler_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1697 | if (!add_attributes(state, state->excepthandler_type, |
1698 | excepthandler_attributes, 4)) return 0; | ||||
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1699 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1705 | state->ExceptHandler_type = make_type(state, "ExceptHandler", |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1706 | state->excepthandler_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1707 | ExceptHandler_fields, 3, |
1708 | "ExceptHandler(expr? type, identifier? name, stmt* body)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1709 | if (!state->ExceptHandler_type) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1710 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1714 | state->arguments_type = make_type(state, "arguments", state->AST_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1715 | arguments_fields, 7, |
1716 | "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1717 | if (!state->arguments_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1718 | if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1719 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1723 | state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1724 | "arg(identifier arg, expr? annotation, string? type_comment)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1725 | if (!state->arg_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1726 | if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1727 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1735 | state->keyword_type = make_type(state, "keyword", state->AST_type, |
1736 | keyword_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1737 | "keyword(identifier? arg, expr value)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1738 | if (!state->keyword_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1739 | if (!add_attributes(state, state->keyword_type, keyword_attributes, 4)) |
1740 | return 0; | ||||
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1741 | if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1) |
1742 | return 0; | ||||
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 1743 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1748 | state->alias_type = make_type(state, "alias", state->AST_type, |
1749 | alias_fields, 2, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1750 | "alias(identifier name, identifier? asname)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1751 | if (!state->alias_type) return 0; |
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 1752 | if (!add_attributes(state, state->alias_type, alias_attributes, 4)) return |
1753 | 0; | ||||
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1754 | if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1) |
1755 | return 0; | ||||
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 1756 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1761 | state->withitem_type = make_type(state, "withitem", state->AST_type, |
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1762 | withitem_fields, 2, |
1763 | "withitem(expr context_expr, expr? optional_vars)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1764 | if (!state->withitem_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1765 | if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0; |
Serhiy Storchaka | b7e9525 | 2020-03-10 00:07:47 +0200 | [diff] [blame] | 1766 | if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None) |
1767 | == -1) | ||||
1768 | return 0; | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1769 | state->match_case_type = make_type(state, "match_case", state->AST_type, |
1770 | match_case_fields, 3, | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 1771 | "match_case(pattern pattern, expr? guard, stmt* body)"); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1772 | 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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 1776 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1833 | state->type_ignore_type = make_type(state, "type_ignore", state->AST_type, |
1834 | NULL, 0, | ||||
Batuhan Taşkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1835 | "type_ignore = TypeIgnore(int lineno, string tag)"); |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1836 | if (!state->type_ignore_type) return 0; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1837 | 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şkaya | 4ab362c | 2020-03-16 11:12:53 +0300 | [diff] [blame] | 1840 | TypeIgnore_fields, 2, |
1841 | "TypeIgnore(int lineno, string tag)"); | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1842 | if (!state->TypeIgnore_type) return 0; |
Victor Stinner | fd957c1 | 2020-11-03 18:07:15 +0100 | [diff] [blame] | 1843 | |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 1844 | state->initialized = 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1845 | return 1; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 1846 | } |
Neal Norwitz | 7b5a604 | 2005-11-13 19:14:20 +0000 | [diff] [blame] | 1847 | |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1848 | static int obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1849 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1850 | static int obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1851 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1852 | static int obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1853 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1854 | static int obj2ast_expr_context(struct ast_state *state, PyObject* obj, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1855 | expr_context_ty* out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1856 | static int obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* |
1857 | out, PyArena* arena); | ||||
1858 | static int obj2ast_operator(struct ast_state *state, PyObject* obj, | ||||
1859 | operator_ty* out, PyArena* arena); | ||||
1860 | static int obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1861 | out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1862 | static int obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1863 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1864 | static int obj2ast_comprehension(struct ast_state *state, PyObject* obj, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1865 | comprehension_ty* out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1866 | static int obj2ast_excepthandler(struct ast_state *state, PyObject* obj, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1867 | excepthandler_ty* out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1868 | static int obj2ast_arguments(struct ast_state *state, PyObject* obj, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1869 | arguments_ty* out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1870 | static int obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1871 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1872 | static int obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1873 | out, PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1874 | static int obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1875 | PyArena* arena); |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1876 | static int obj2ast_withitem(struct ast_state *state, PyObject* obj, |
1877 | withitem_ty* out, PyArena* arena); | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 1878 | static int obj2ast_match_case(struct ast_state *state, PyObject* obj, |
1879 | match_case_ty* out, PyArena* arena); | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 1880 | static int obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* |
1881 | out, PyArena* arena); | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 1882 | static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 1883 | type_ignore_ty* out, PyArena* arena); |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 1884 | |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1885 | mod_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1886 | _PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, |
1887 | PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1888 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1889 | mod_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1890 | p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1891 | if (!p) |
1892 | return NULL; | ||||
1893 | p->kind = Module_kind; | ||||
1894 | p->v.Module.body = body; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1895 | p->v.Module.type_ignores = type_ignores; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1896 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1897 | } |
1898 | |||||
1899 | mod_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1900 | _PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1901 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1902 | mod_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1903 | p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1904 | if (!p) |
1905 | return NULL; | ||||
1906 | p->kind = Interactive_kind; | ||||
1907 | p->v.Interactive.body = body; | ||||
1908 | return p; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1909 | } |
1910 | |||||
1911 | mod_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1912 | _PyAST_Expression(expr_ty body, PyArena *arena) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1913 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1914 | mod_ty p; |
1915 | if (!body) { | ||||
1916 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1917 | "field 'body' is required for Expression"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1918 | return NULL; |
1919 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1920 | p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1921 | if (!p) |
1922 | return NULL; | ||||
1923 | p->kind = Expression_kind; | ||||
1924 | p->v.Expression.body = body; | ||||
1925 | return p; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1926 | } |
1927 | |||||
1928 | mod_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1929 | _PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1930 | { |
1931 | mod_ty p; | ||||
1932 | if (!returns) { | ||||
1933 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1934 | "field 'returns' is required for FunctionType"); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1935 | return NULL; |
1936 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1937 | p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1938 | 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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1946 | stmt_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1947 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1951 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1952 | stmt_ty p; |
1953 | if (!name) { | ||||
1954 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1955 | "field 'name' is required for FunctionDef"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1956 | return NULL; |
1957 | } | ||||
1958 | if (!args) { | ||||
1959 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1960 | "field 'args' is required for FunctionDef"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1961 | return NULL; |
1962 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1963 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1964 | 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 Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 1972 | p->v.FunctionDef.type_comment = type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1973 | p->lineno = lineno; |
1974 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 1975 | p->end_lineno = end_lineno; |
1976 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 1977 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 1978 | } |
1979 | |||||
1980 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 1981 | _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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 1985 | { |
1986 | stmt_ty p; | ||||
1987 | if (!name) { | ||||
1988 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1989 | "field 'name' is required for AsyncFunctionDef"); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 1990 | return NULL; |
1991 | } | ||||
1992 | if (!args) { | ||||
1993 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 1994 | "field 'args' is required for AsyncFunctionDef"); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 1995 | return NULL; |
1996 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 1997 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 1998 | 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 Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2006 | p->v.AsyncFunctionDef.type_comment = type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2007 | p->lineno = lineno; |
2008 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2009 | p->end_lineno = end_lineno; |
2010 | p->end_col_offset = end_col_offset; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2011 | return p; |
2012 | } | ||||
2013 | |||||
2014 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2015 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2019 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2020 | stmt_ty p; |
2021 | if (!name) { | ||||
2022 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2023 | "field 'name' is required for ClassDef"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2024 | return NULL; |
2025 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2026 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2027 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2033 | p->v.ClassDef.body = body; |
2034 | p->v.ClassDef.decorator_list = decorator_list; | ||||
2035 | p->lineno = lineno; | ||||
2036 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2037 | p->end_lineno = end_lineno; |
2038 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2039 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2040 | } |
2041 | |||||
2042 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2043 | _PyAST_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int |
2044 | end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2045 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2046 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2047 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2048 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2054 | p->end_lineno = end_lineno; |
2055 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2056 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2057 | } |
2058 | |||||
2059 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2060 | _PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int |
2061 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2062 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2063 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2064 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2065 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2071 | p->end_lineno = end_lineno; |
2072 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2073 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2074 | } |
2075 | |||||
2076 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2077 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2080 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2081 | stmt_ty p; |
2082 | if (!value) { | ||||
2083 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2084 | "field 'value' is required for Assign"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2085 | return NULL; |
2086 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2087 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2088 | if (!p) |
2089 | return NULL; | ||||
2090 | p->kind = Assign_kind; | ||||
2091 | p->v.Assign.targets = targets; | ||||
2092 | p->v.Assign.value = value; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2093 | p->v.Assign.type_comment = type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2094 | p->lineno = lineno; |
2095 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2096 | p->end_lineno = end_lineno; |
2097 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2098 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2099 | } |
2100 | |||||
2101 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2102 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2104 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2105 | stmt_ty p; |
2106 | if (!target) { | ||||
2107 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2108 | "field 'target' is required for AugAssign"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2109 | return NULL; |
2110 | } | ||||
2111 | if (!op) { | ||||
2112 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2113 | "field 'op' is required for AugAssign"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2114 | return NULL; |
2115 | } | ||||
2116 | if (!value) { | ||||
2117 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2118 | "field 'value' is required for AugAssign"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2119 | return NULL; |
2120 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2121 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2122 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2130 | p->end_lineno = end_lineno; |
2131 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2132 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2133 | } |
2134 | |||||
2135 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2136 | _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 Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 2139 | { |
2140 | stmt_ty p; | ||||
2141 | if (!target) { | ||||
2142 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2143 | "field 'target' is required for AnnAssign"); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 2144 | return NULL; |
2145 | } | ||||
2146 | if (!annotation) { | ||||
2147 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2148 | "field 'annotation' is required for AnnAssign"); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 2149 | return NULL; |
2150 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2151 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 2152 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2161 | p->end_lineno = end_lineno; |
2162 | p->end_col_offset = end_col_offset; | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 2163 | return p; |
2164 | } | ||||
2165 | |||||
2166 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2167 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2170 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2171 | stmt_ty p; |
2172 | if (!target) { | ||||
2173 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2174 | "field 'target' is required for For"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2175 | return NULL; |
2176 | } | ||||
2177 | if (!iter) { | ||||
2178 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2179 | "field 'iter' is required for For"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2180 | return NULL; |
2181 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2182 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2183 | 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 Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2190 | p->v.For.type_comment = type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2191 | p->lineno = lineno; |
2192 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2193 | p->end_lineno = end_lineno; |
2194 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2195 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2196 | } |
2197 | |||||
2198 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2199 | _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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2202 | { |
2203 | stmt_ty p; | ||||
2204 | if (!target) { | ||||
2205 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2206 | "field 'target' is required for AsyncFor"); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2207 | return NULL; |
2208 | } | ||||
2209 | if (!iter) { | ||||
2210 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2211 | "field 'iter' is required for AsyncFor"); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2212 | return NULL; |
2213 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2214 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2215 | 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 Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2222 | p->v.AsyncFor.type_comment = type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2223 | p->lineno = lineno; |
2224 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2225 | p->end_lineno = end_lineno; |
2226 | p->end_col_offset = end_col_offset; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2227 | return p; |
2228 | } | ||||
2229 | |||||
2230 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2231 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2234 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2235 | stmt_ty p; |
2236 | if (!test) { | ||||
2237 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2238 | "field 'test' is required for While"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2239 | return NULL; |
2240 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2241 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2242 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2250 | p->end_lineno = end_lineno; |
2251 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2252 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2253 | } |
2254 | |||||
2255 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2256 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2259 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2260 | stmt_ty p; |
2261 | if (!test) { | ||||
2262 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2263 | "field 'test' is required for If"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2264 | return NULL; |
2265 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2266 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2267 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2275 | p->end_lineno = end_lineno; |
2276 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2277 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2278 | } |
2279 | |||||
2280 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2281 | _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 Rossum | c2e2074 | 2006-02-27 22:32:47 +0000 | [diff] [blame] | 2284 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2285 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2286 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2287 | if (!p) |
2288 | return NULL; | ||||
2289 | p->kind = With_kind; | ||||
2290 | p->v.With.items = items; | ||||
2291 | p->v.With.body = body; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2292 | p->v.With.type_comment = type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2293 | p->lineno = lineno; |
2294 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2295 | p->end_lineno = end_lineno; |
2296 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2297 | return p; |
Guido van Rossum | c2e2074 | 2006-02-27 22:32:47 +0000 | [diff] [blame] | 2298 | } |
2299 | |||||
2300 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2301 | _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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2304 | { |
2305 | stmt_ty p; | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2306 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2307 | if (!p) |
2308 | return NULL; | ||||
2309 | p->kind = AsyncWith_kind; | ||||
2310 | p->v.AsyncWith.items = items; | ||||
2311 | p->v.AsyncWith.body = body; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 2312 | p->v.AsyncWith.type_comment = type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2313 | p->lineno = lineno; |
2314 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2315 | p->end_lineno = end_lineno; |
2316 | p->end_col_offset = end_col_offset; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2317 | return p; |
2318 | } | ||||
2319 | |||||
2320 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2321 | _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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 2323 | { |
2324 | stmt_ty p; | ||||
2325 | if (!subject) { | ||||
2326 | PyErr_SetString(PyExc_ValueError, | ||||
2327 | "field 'subject' is required for Match"); | ||||
2328 | return NULL; | ||||
2329 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2330 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 2331 | 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 | |||||
2343 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2344 | _PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int |
2345 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2346 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2347 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2348 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2349 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2356 | p->end_lineno = end_lineno; |
2357 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2358 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2359 | } |
2360 | |||||
2361 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2362 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2365 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2366 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2367 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2368 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2377 | p->end_lineno = end_lineno; |
2378 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2379 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2380 | } |
2381 | |||||
2382 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2383 | _PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int |
2384 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2385 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2386 | stmt_ty p; |
2387 | if (!test) { | ||||
2388 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2389 | "field 'test' is required for Assert"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2390 | return NULL; |
2391 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2392 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2393 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2400 | p->end_lineno = end_lineno; |
2401 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2402 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2403 | } |
2404 | |||||
2405 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2406 | _PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int |
2407 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2408 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2409 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2410 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2411 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2417 | p->end_lineno = end_lineno; |
2418 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2419 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2420 | } |
2421 | |||||
2422 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2423 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2426 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2427 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2428 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2429 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2437 | p->end_lineno = end_lineno; |
2438 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2439 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2440 | } |
2441 | |||||
2442 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2443 | _PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, int |
2444 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2445 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2446 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2447 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2448 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2454 | p->end_lineno = end_lineno; |
2455 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2456 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2457 | } |
2458 | |||||
2459 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2460 | _PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int |
2461 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 81e9502 | 2007-02-27 06:50:52 +0000 | [diff] [blame] | 2462 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2463 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2464 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2465 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2471 | p->end_lineno = end_lineno; |
2472 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2473 | return p; |
Jeremy Hylton | 81e9502 | 2007-02-27 06:50:52 +0000 | [diff] [blame] | 2474 | } |
2475 | |||||
2476 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2477 | _PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int |
2478 | end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2479 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2480 | stmt_ty p; |
2481 | if (!value) { | ||||
2482 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2483 | "field 'value' is required for Expr"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2484 | return NULL; |
2485 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2486 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2487 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2493 | p->end_lineno = end_lineno; |
2494 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2495 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2496 | } |
2497 | |||||
2498 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2499 | _PyAST_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, |
2500 | PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2501 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2502 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2503 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2504 | if (!p) |
2505 | return NULL; | ||||
2506 | p->kind = Pass_kind; | ||||
2507 | p->lineno = lineno; | ||||
2508 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2509 | p->end_lineno = end_lineno; |
2510 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2511 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2512 | } |
2513 | |||||
2514 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2515 | _PyAST_Break(int lineno, int col_offset, int end_lineno, int end_col_offset, |
2516 | PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2517 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2518 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2519 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2520 | if (!p) |
2521 | return NULL; | ||||
2522 | p->kind = Break_kind; | ||||
2523 | p->lineno = lineno; | ||||
2524 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2525 | p->end_lineno = end_lineno; |
2526 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2527 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2528 | } |
2529 | |||||
2530 | stmt_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2531 | _PyAST_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset, |
2532 | PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2533 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2534 | stmt_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2535 | p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2536 | if (!p) |
2537 | return NULL; | ||||
2538 | p->kind = Continue_kind; | ||||
2539 | p->lineno = lineno; | ||||
2540 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2541 | p->end_lineno = end_lineno; |
2542 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2543 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2544 | } |
2545 | |||||
2546 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2547 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2549 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2550 | expr_ty p; |
2551 | if (!op) { | ||||
2552 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2553 | "field 'op' is required for BoolOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2554 | return NULL; |
2555 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2556 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2557 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2564 | p->end_lineno = end_lineno; |
2565 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2566 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2567 | } |
2568 | |||||
2569 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2570 | _PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int |
2571 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 2572 | { |
2573 | expr_ty p; | ||||
2574 | if (!target) { | ||||
2575 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2576 | "field 'target' is required for NamedExpr"); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 2577 | return NULL; |
2578 | } | ||||
2579 | if (!value) { | ||||
2580 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2581 | "field 'value' is required for NamedExpr"); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 2582 | return NULL; |
2583 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2584 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 2585 | 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 | |||||
2597 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2598 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2600 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2601 | expr_ty p; |
2602 | if (!left) { | ||||
2603 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2604 | "field 'left' is required for BinOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2605 | return NULL; |
2606 | } | ||||
2607 | if (!op) { | ||||
2608 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2609 | "field 'op' is required for BinOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2610 | return NULL; |
2611 | } | ||||
2612 | if (!right) { | ||||
2613 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2614 | "field 'right' is required for BinOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2615 | return NULL; |
2616 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2617 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2618 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2626 | p->end_lineno = end_lineno; |
2627 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2628 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2629 | } |
2630 | |||||
2631 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2632 | _PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int |
2633 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2634 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2635 | expr_ty p; |
2636 | if (!op) { | ||||
2637 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2638 | "field 'op' is required for UnaryOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2639 | return NULL; |
2640 | } | ||||
2641 | if (!operand) { | ||||
2642 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2643 | "field 'operand' is required for UnaryOp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2644 | return NULL; |
2645 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2646 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2647 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2654 | p->end_lineno = end_lineno; |
2655 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2656 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2657 | } |
2658 | |||||
2659 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2660 | _PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int |
2661 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2662 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2663 | expr_ty p; |
2664 | if (!args) { | ||||
2665 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2666 | "field 'args' is required for Lambda"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2667 | return NULL; |
2668 | } | ||||
2669 | if (!body) { | ||||
2670 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2671 | "field 'body' is required for Lambda"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2672 | return NULL; |
2673 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2674 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2675 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2682 | p->end_lineno = end_lineno; |
2683 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2684 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2685 | } |
2686 | |||||
2687 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2688 | _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 Wouters | dca3b9c | 2006-02-27 00:24:13 +0000 | [diff] [blame] | 2690 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2691 | expr_ty p; |
2692 | if (!test) { | ||||
2693 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2694 | "field 'test' is required for IfExp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2695 | return NULL; |
2696 | } | ||||
2697 | if (!body) { | ||||
2698 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2699 | "field 'body' is required for IfExp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2700 | return NULL; |
2701 | } | ||||
2702 | if (!orelse) { | ||||
2703 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2704 | "field 'orelse' is required for IfExp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2705 | return NULL; |
2706 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2707 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2708 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2716 | p->end_lineno = end_lineno; |
2717 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2718 | return p; |
Thomas Wouters | dca3b9c | 2006-02-27 00:24:13 +0000 | [diff] [blame] | 2719 | } |
2720 | |||||
2721 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2722 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2724 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2725 | expr_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2726 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2727 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2734 | p->end_lineno = end_lineno; |
2735 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2736 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2737 | } |
2738 | |||||
2739 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2740 | _PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, |
2741 | int end_col_offset, PyArena *arena) | ||||
Guido van Rossum | 86e58e2 | 2006-08-28 15:27:34 +0000 | [diff] [blame] | 2742 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2743 | expr_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2744 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2745 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2751 | p->end_lineno = end_lineno; |
2752 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2753 | return p; |
Guido van Rossum | 86e58e2 | 2006-08-28 15:27:34 +0000 | [diff] [blame] | 2754 | } |
2755 | |||||
2756 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2757 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2760 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2761 | expr_ty p; |
2762 | if (!elt) { | ||||
2763 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2764 | "field 'elt' is required for ListComp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2765 | return NULL; |
2766 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2767 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2768 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2775 | p->end_lineno = end_lineno; |
2776 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2777 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2778 | } |
2779 | |||||
2780 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2781 | _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 Coghlan | 650f0d0 | 2007-04-15 12:05:43 +0000 | [diff] [blame] | 2784 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2785 | expr_ty p; |
2786 | if (!elt) { | ||||
2787 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2788 | "field 'elt' is required for SetComp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2789 | return NULL; |
2790 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2791 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2792 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2799 | p->end_lineno = end_lineno; |
2800 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2801 | return p; |
Nick Coghlan | 650f0d0 | 2007-04-15 12:05:43 +0000 | [diff] [blame] | 2802 | } |
2803 | |||||
2804 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2805 | _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 Rossum | 992d4a3 | 2007-07-11 13:09:30 +0000 | [diff] [blame] | 2808 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2809 | expr_ty p; |
2810 | if (!key) { | ||||
2811 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2812 | "field 'key' is required for DictComp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2813 | return NULL; |
2814 | } | ||||
2815 | if (!value) { | ||||
2816 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2817 | "field 'value' is required for DictComp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2818 | return NULL; |
2819 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2820 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2821 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2829 | p->end_lineno = end_lineno; |
2830 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2831 | return p; |
Guido van Rossum | 992d4a3 | 2007-07-11 13:09:30 +0000 | [diff] [blame] | 2832 | } |
2833 | |||||
2834 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2835 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2838 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2839 | expr_ty p; |
2840 | if (!elt) { | ||||
2841 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2842 | "field 'elt' is required for GeneratorExp"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2843 | return NULL; |
2844 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2845 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2846 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2853 | p->end_lineno = end_lineno; |
2854 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2855 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2856 | } |
2857 | |||||
2858 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2859 | _PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int |
2860 | end_col_offset, PyArena *arena) | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2861 | { |
2862 | expr_ty p; | ||||
2863 | if (!value) { | ||||
2864 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2865 | "field 'value' is required for Await"); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2866 | return NULL; |
2867 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2868 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2869 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2875 | p->end_lineno = end_lineno; |
2876 | p->end_col_offset = end_col_offset; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 2877 | return p; |
2878 | } | ||||
2879 | |||||
2880 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2881 | _PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int |
2882 | end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2883 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2884 | expr_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2885 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2886 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2892 | p->end_lineno = end_lineno; |
2893 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2894 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2895 | } |
2896 | |||||
2897 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2898 | _PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int |
2899 | end_col_offset, PyArena *arena) | ||||
Benjamin Peterson | 527c622 | 2012-01-14 08:58:23 -0500 | [diff] [blame] | 2900 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2901 | expr_ty p; |
2902 | if (!value) { | ||||
2903 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2904 | "field 'value' is required for YieldFrom"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2905 | return NULL; |
2906 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2907 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2908 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2914 | p->end_lineno = end_lineno; |
2915 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2916 | return p; |
Benjamin Peterson | 527c622 | 2012-01-14 08:58:23 -0500 | [diff] [blame] | 2917 | } |
2918 | |||||
2919 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2920 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2923 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2924 | expr_ty p; |
2925 | if (!left) { | ||||
2926 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2927 | "field 'left' is required for Compare"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2928 | return NULL; |
2929 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2930 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2931 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2939 | p->end_lineno = end_lineno; |
2940 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2941 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2942 | } |
2943 | |||||
2944 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2945 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2948 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2949 | expr_ty p; |
2950 | if (!func) { | ||||
2951 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2952 | "field 'func' is required for Call"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2953 | return NULL; |
2954 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2955 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2956 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2962 | p->lineno = lineno; |
2963 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2964 | p->end_lineno = end_lineno; |
2965 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 2966 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 2967 | } |
2968 | |||||
2969 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2970 | _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. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 2973 | { |
2974 | expr_ty p; | ||||
2975 | if (!value) { | ||||
2976 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 2977 | "field 'value' is required for FormattedValue"); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 2978 | return NULL; |
2979 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2980 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 2981 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 2989 | p->end_lineno = end_lineno; |
2990 | p->end_col_offset = end_col_offset; | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 2991 | return p; |
2992 | } | ||||
2993 | |||||
2994 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 2995 | _PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int |
2996 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 2997 | { |
2998 | expr_ty p; | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 2999 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 3000 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3006 | p->end_lineno = end_lineno; |
3007 | p->end_col_offset = end_col_offset; | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 3008 | return p; |
3009 | } | ||||
3010 | |||||
3011 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3012 | _PyAST_Constant(constant value, string kind, int lineno, int col_offset, int |
3013 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 3014 | { |
3015 | expr_ty p; | ||||
3016 | if (!value) { | ||||
3017 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3018 | "field 'value' is required for Constant"); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 3019 | return NULL; |
3020 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3021 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 3022 | if (!p) |
3023 | return NULL; | ||||
3024 | p->kind = Constant_kind; | ||||
3025 | p->v.Constant.value = value; | ||||
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 3026 | p->v.Constant.kind = kind; |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 3027 | p->lineno = lineno; |
3028 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3029 | p->end_lineno = end_lineno; |
3030 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 3031 | return p; |
3032 | } | ||||
3033 | |||||
3034 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3035 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3038 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3039 | expr_ty p; |
3040 | if (!value) { | ||||
3041 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3042 | "field 'value' is required for Attribute"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3043 | return NULL; |
3044 | } | ||||
3045 | if (!attr) { | ||||
3046 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3047 | "field 'attr' is required for Attribute"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3048 | return NULL; |
3049 | } | ||||
3050 | if (!ctx) { | ||||
3051 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3052 | "field 'ctx' is required for Attribute"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3053 | return NULL; |
3054 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3055 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3056 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3064 | p->end_lineno = end_lineno; |
3065 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3066 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3067 | } |
3068 | |||||
3069 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3070 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3073 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3074 | expr_ty p; |
3075 | if (!value) { | ||||
3076 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3077 | "field 'value' is required for Subscript"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3078 | return NULL; |
3079 | } | ||||
3080 | if (!slice) { | ||||
3081 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3082 | "field 'slice' is required for Subscript"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3083 | return NULL; |
3084 | } | ||||
3085 | if (!ctx) { | ||||
3086 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3087 | "field 'ctx' is required for Subscript"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3088 | return NULL; |
3089 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3090 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3091 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3099 | p->end_lineno = end_lineno; |
3100 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3101 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3102 | } |
3103 | |||||
3104 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3105 | _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 Rossum | 0368b72 | 2007-05-11 16:50:42 +0000 | [diff] [blame] | 3107 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3108 | expr_ty p; |
3109 | if (!value) { | ||||
3110 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3111 | "field 'value' is required for Starred"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3112 | return NULL; |
3113 | } | ||||
3114 | if (!ctx) { | ||||
3115 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3116 | "field 'ctx' is required for Starred"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3117 | return NULL; |
3118 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3119 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3120 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3127 | p->end_lineno = end_lineno; |
3128 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3129 | return p; |
Guido van Rossum | 0368b72 | 2007-05-11 16:50:42 +0000 | [diff] [blame] | 3130 | } |
3131 | |||||
3132 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3133 | _PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int |
3134 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3135 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3136 | expr_ty p; |
3137 | if (!id) { | ||||
3138 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3139 | "field 'id' is required for Name"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3140 | return NULL; |
3141 | } | ||||
3142 | if (!ctx) { | ||||
3143 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3144 | "field 'ctx' is required for Name"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3145 | return NULL; |
3146 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3147 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3148 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3155 | p->end_lineno = end_lineno; |
3156 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3157 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3158 | } |
3159 | |||||
3160 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3161 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3163 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3164 | expr_ty p; |
3165 | if (!ctx) { | ||||
3166 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3167 | "field 'ctx' is required for List"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3168 | return NULL; |
3169 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3170 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3171 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3178 | p->end_lineno = end_lineno; |
3179 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3180 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3181 | } |
3182 | |||||
3183 | expr_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3184 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3186 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3187 | expr_ty p; |
3188 | if (!ctx) { | ||||
3189 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3190 | "field 'ctx' is required for Tuple"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3191 | return NULL; |
3192 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3193 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3194 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3201 | p->end_lineno = end_lineno; |
3202 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3203 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3204 | } |
3205 | |||||
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 3206 | expr_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3207 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3209 | { |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 3210 | expr_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3211 | p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3212 | 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 Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 3218 | p->lineno = lineno; |
3219 | p->col_offset = col_offset; | ||||
3220 | p->end_lineno = end_lineno; | ||||
3221 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3222 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3223 | } |
3224 | |||||
3225 | comprehension_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3226 | _PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int |
3227 | is_async, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3228 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3229 | comprehension_ty p; |
3230 | if (!target) { | ||||
3231 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3232 | "field 'target' is required for comprehension"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3233 | return NULL; |
3234 | } | ||||
3235 | if (!iter) { | ||||
3236 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3237 | "field 'iter' is required for comprehension"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3238 | return NULL; |
3239 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3240 | p = (comprehension_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3241 | if (!p) |
3242 | return NULL; | ||||
3243 | p->target = target; | ||||
3244 | p->iter = iter; | ||||
3245 | p->ifs = ifs; | ||||
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 3246 | p->is_async = is_async; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3247 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3248 | } |
3249 | |||||
3250 | excepthandler_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3251 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3254 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3255 | excepthandler_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3256 | p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3257 | 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 Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3265 | p->end_lineno = end_lineno; |
3266 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3267 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3268 | } |
3269 | |||||
3270 | arguments_ty | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3271 | _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 Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3275 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3276 | arguments_ty p; |
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3277 | p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3278 | if (!p) |
3279 | return NULL; | ||||
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 3280 | p->posonlyargs = posonlyargs; |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 3281 | p->args = args; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3282 | p->vararg = vararg; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3283 | p->kwonlyargs = kwonlyargs; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3284 | p->kw_defaults = kw_defaults; |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 3285 | p->kwarg = kwarg; |
3286 | p->defaults = defaults; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3287 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3288 | } |
3289 | |||||
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 3290 | arg_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3291 | _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 Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 3293 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3294 | arg_ty p; |
3295 | if (!arg) { | ||||
3296 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3297 | "field 'arg' is required for arg"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3298 | return NULL; |
3299 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3300 | p = (arg_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3301 | if (!p) |
3302 | return NULL; | ||||
3303 | p->arg = arg; | ||||
3304 | p->annotation = annotation; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3305 | p->type_comment = type_comment; |
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 3306 | p->lineno = lineno; |
3307 | p->col_offset = col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 3308 | p->end_lineno = end_lineno; |
3309 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3310 | return p; |
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 3311 | } |
3312 | |||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3313 | keyword_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3314 | _PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int |
3315 | end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3316 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3317 | keyword_ty p; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3318 | if (!value) { |
3319 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3320 | "field 'value' is required for keyword"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3321 | return NULL; |
3322 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3323 | p = (keyword_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3324 | if (!p) |
3325 | return NULL; | ||||
3326 | p->arg = arg; | ||||
3327 | p->value = value; | ||||
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 3328 | p->lineno = lineno; |
3329 | p->col_offset = col_offset; | ||||
3330 | p->end_lineno = end_lineno; | ||||
3331 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3332 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3333 | } |
3334 | |||||
3335 | alias_ty | ||||
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 3336 | _PyAST_alias(identifier name, identifier asname, int lineno, int col_offset, |
3337 | int end_lineno, int end_col_offset, PyArena *arena) | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3338 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3339 | alias_ty p; |
3340 | if (!name) { | ||||
3341 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3342 | "field 'name' is required for alias"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3343 | return NULL; |
3344 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3345 | p = (alias_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3346 | if (!p) |
3347 | return NULL; | ||||
3348 | p->name = name; | ||||
3349 | p->asname = asname; | ||||
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 3350 | p->lineno = lineno; |
3351 | p->col_offset = col_offset; | ||||
3352 | p->end_lineno = end_lineno; | ||||
3353 | p->end_col_offset = end_col_offset; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3354 | return p; |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3355 | } |
3356 | |||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 3357 | withitem_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3358 | _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena) |
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 3359 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3360 | withitem_ty p; |
3361 | if (!context_expr) { | ||||
3362 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3363 | "field 'context_expr' is required for withitem"); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3364 | return NULL; |
3365 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3366 | p = (withitem_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3367 | if (!p) |
3368 | return NULL; | ||||
3369 | p->context_expr = context_expr; | ||||
3370 | p->optional_vars = optional_vars; | ||||
3371 | return p; | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 3372 | } |
3373 | |||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 3374 | match_case_ty |
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 3375 | _PyAST_match_case(pattern_ty pattern, expr_ty guard, asdl_stmt_seq * body, |
3376 | PyArena *arena) | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 3377 | { |
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 Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3384 | p = (match_case_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 3385 | if (!p) |
3386 | return NULL; | ||||
3387 | p->pattern = pattern; | ||||
3388 | p->guard = guard; | ||||
3389 | p->body = body; | ||||
3390 | return p; | ||||
3391 | } | ||||
3392 | |||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 3393 | pattern_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 | |||||
3415 | pattern_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 | |||||
3437 | pattern_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 | |||||
3454 | pattern_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 | |||||
3474 | pattern_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 | |||||
3501 | pattern_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 | |||||
3518 | pattern_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 | |||||
3536 | pattern_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 Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3553 | type_ignore_ty |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 3554 | _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3555 | { |
3556 | type_ignore_ty p; | ||||
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 3557 | if (!tag) { |
3558 | PyErr_SetString(PyExc_ValueError, | ||||
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 3559 | "field 'tag' is required for TypeIgnore"); |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 3560 | return NULL; |
3561 | } | ||||
Victor Stinner | 8370e07 | 2021-03-24 02:23:01 +0100 | [diff] [blame] | 3562 | p = (type_ignore_ty)_PyArena_Malloc(arena, sizeof(*p)); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3563 | if (!p) |
3564 | return NULL; | ||||
3565 | p->kind = TypeIgnore_kind; | ||||
3566 | p->v.TypeIgnore.lineno = lineno; | ||||
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 3567 | p->v.TypeIgnore.tag = tag; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3568 | return p; |
3569 | } | ||||
3570 | |||||
Neal Norwitz | 7b5a604 | 2005-11-13 19:14:20 +0000 | [diff] [blame] | 3571 | |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 3572 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 3573 | ast2obj_mod(struct ast_state *state, void* _o) |
Neal Norwitz | 7b5a604 | 2005-11-13 19:14:20 +0000 | [diff] [blame] | 3574 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3575 | mod_ty o = (mod_ty)_o; |
3576 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3577 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3578 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 3579 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3580 | } |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3581 | switch (o->kind) { |
3582 | case Module_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3583 | tp = (PyTypeObject *)state->Module_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3584 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3585 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3586 | value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3587 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3588 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3589 | goto failed; |
3590 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3591 | value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3592 | ast2obj_type_ignore); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3593 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3594 | if (PyObject_SetAttr(result, state->type_ignores, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3595 | goto failed; |
3596 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3597 | break; |
3598 | case Interactive_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3599 | tp = (PyTypeObject *)state->Interactive_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3600 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3601 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3602 | value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body, |
3603 | ast2obj_stmt); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3604 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3605 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3606 | goto failed; |
3607 | Py_DECREF(value); | ||||
3608 | break; | ||||
3609 | case Expression_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3610 | tp = (PyTypeObject *)state->Expression_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3611 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3612 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3613 | value = ast2obj_expr(state, o->v.Expression.body); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3614 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3615 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3616 | goto failed; |
3617 | Py_DECREF(value); | ||||
3618 | break; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3619 | case FunctionType_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3620 | tp = (PyTypeObject *)state->FunctionType_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3621 | result = PyType_GenericNew(tp, NULL, NULL); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3622 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3623 | value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes, |
3624 | ast2obj_expr); | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3625 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3626 | if (PyObject_SetAttr(result, state->argtypes, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3627 | goto failed; |
3628 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3629 | value = ast2obj_expr(state, o->v.FunctionType.returns); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3630 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3631 | if (PyObject_SetAttr(result, state->returns, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3632 | goto failed; |
3633 | Py_DECREF(value); | ||||
3634 | break; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3635 | } |
3636 | return result; | ||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 3637 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3638 | Py_XDECREF(value); |
3639 | Py_XDECREF(result); | ||||
3640 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3641 | } |
3642 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 3643 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 3644 | ast2obj_stmt(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 3645 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3646 | stmt_ty o = (stmt_ty)_o; |
3647 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3648 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3649 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 3650 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3651 | } |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3652 | switch (o->kind) { |
3653 | case FunctionDef_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3654 | tp = (PyTypeObject *)state->FunctionDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3655 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3656 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3657 | value = ast2obj_identifier(state, o->v.FunctionDef.name); |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 3658 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3659 | if (PyObject_SetAttr(result, state->name, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3660 | goto failed; |
Martin v. Löwis | 03e5bc0 | 2006-03-02 00:31:27 +0000 | [diff] [blame] | 3661 | Py_DECREF(value); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3662 | value = ast2obj_arguments(state, o->v.FunctionDef.args); |
Martin v. Löwis | 49c5da1 | 2006-03-01 22:49:05 +0000 | [diff] [blame] | 3663 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3664 | if (PyObject_SetAttr(result, state->args, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3665 | goto failed; |
Martin v. Löwis | 03e5bc0 | 2006-03-02 00:31:27 +0000 | [diff] [blame] | 3666 | Py_DECREF(value); |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3667 | value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body, |
3668 | ast2obj_stmt); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3669 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3670 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3671 | goto failed; |
3672 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3673 | value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3674 | ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3675 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3676 | if (PyObject_SetAttr(result, state->decorator_list, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3677 | goto failed; |
3678 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3679 | value = ast2obj_expr(state, o->v.FunctionDef.returns); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3680 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3681 | if (PyObject_SetAttr(result, state->returns, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3682 | goto failed; |
3683 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3684 | value = ast2obj_string(state, o->v.FunctionDef.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3685 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3686 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3687 | goto failed; |
3688 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3689 | break; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3690 | case AsyncFunctionDef_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3691 | tp = (PyTypeObject *)state->AsyncFunctionDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3692 | result = PyType_GenericNew(tp, NULL, NULL); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3693 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3694 | value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3695 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3696 | if (PyObject_SetAttr(result, state->name, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3697 | goto failed; |
3698 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3699 | value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3700 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3701 | if (PyObject_SetAttr(result, state->args, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3702 | goto failed; |
3703 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3704 | value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body, |
3705 | ast2obj_stmt); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3706 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3707 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3708 | goto failed; |
3709 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3710 | value = ast2obj_list(state, |
3711 | (asdl_seq*)o->v.AsyncFunctionDef.decorator_list, | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3712 | ast2obj_expr); |
3713 | if (!value) goto failed; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3714 | if (PyObject_SetAttr(result, state->decorator_list, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3715 | goto failed; |
3716 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3717 | value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3718 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3719 | if (PyObject_SetAttr(result, state->returns, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3720 | goto failed; |
3721 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3722 | value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3723 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3724 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3725 | goto failed; |
3726 | Py_DECREF(value); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3727 | break; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3728 | case ClassDef_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3729 | tp = (PyTypeObject *)state->ClassDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3730 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3731 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3732 | value = ast2obj_identifier(state, o->v.ClassDef.name); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3733 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3734 | if (PyObject_SetAttr(result, state->name, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3735 | goto failed; |
3736 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3737 | value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases, |
3738 | ast2obj_expr); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3739 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3740 | if (PyObject_SetAttr(result, state->bases, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3741 | goto failed; |
3742 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3743 | value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords, |
3744 | ast2obj_keyword); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3745 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3746 | if (PyObject_SetAttr(result, state->keywords, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3747 | goto failed; |
3748 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3749 | value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body, |
3750 | ast2obj_stmt); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3751 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3752 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3753 | goto failed; |
3754 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3755 | value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list, |
3756 | ast2obj_expr); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3757 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3758 | if (PyObject_SetAttr(result, state->decorator_list, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3759 | goto failed; |
3760 | Py_DECREF(value); | ||||
3761 | break; | ||||
3762 | case Return_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3763 | tp = (PyTypeObject *)state->Return_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3764 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3765 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3766 | value = ast2obj_expr(state, o->v.Return.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3767 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3768 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3769 | goto failed; |
3770 | Py_DECREF(value); | ||||
3771 | break; | ||||
3772 | case Delete_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3773 | tp = (PyTypeObject *)state->Delete_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3774 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3775 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3776 | value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets, |
3777 | ast2obj_expr); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3778 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3779 | if (PyObject_SetAttr(result, state->targets, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3780 | goto failed; |
3781 | Py_DECREF(value); | ||||
3782 | break; | ||||
3783 | case Assign_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3784 | tp = (PyTypeObject *)state->Assign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3785 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3786 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3787 | value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets, |
3788 | ast2obj_expr); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3789 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3790 | if (PyObject_SetAttr(result, state->targets, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3791 | goto failed; |
3792 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3793 | value = ast2obj_expr(state, o->v.Assign.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3794 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3795 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3796 | goto failed; |
3797 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3798 | value = ast2obj_string(state, o->v.Assign.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3799 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3800 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3801 | goto failed; |
3802 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3803 | break; |
3804 | case AugAssign_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3805 | tp = (PyTypeObject *)state->AugAssign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3806 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3807 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3808 | value = ast2obj_expr(state, o->v.AugAssign.target); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3809 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3810 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3811 | goto failed; |
3812 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3813 | value = ast2obj_operator(state, o->v.AugAssign.op); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3814 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3815 | if (PyObject_SetAttr(result, state->op, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3816 | goto failed; |
3817 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3818 | value = ast2obj_expr(state, o->v.AugAssign.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3819 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3820 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3821 | goto failed; |
3822 | Py_DECREF(value); | ||||
3823 | break; | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3824 | case AnnAssign_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3825 | tp = (PyTypeObject *)state->AnnAssign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3826 | result = PyType_GenericNew(tp, NULL, NULL); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3827 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3828 | value = ast2obj_expr(state, o->v.AnnAssign.target); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3829 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3830 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3831 | goto failed; |
3832 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3833 | value = ast2obj_expr(state, o->v.AnnAssign.annotation); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3834 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3835 | if (PyObject_SetAttr(result, state->annotation, value) == -1) |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3836 | goto failed; |
3837 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3838 | value = ast2obj_expr(state, o->v.AnnAssign.value); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3839 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3840 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3841 | goto failed; |
3842 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3843 | value = ast2obj_int(state, o->v.AnnAssign.simple); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3844 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3845 | if (PyObject_SetAttr(result, state->simple, value) == -1) |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 3846 | goto failed; |
3847 | Py_DECREF(value); | ||||
3848 | break; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3849 | case For_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3850 | tp = (PyTypeObject *)state->For_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3851 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3852 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3853 | value = ast2obj_expr(state, o->v.For.target); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3854 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3855 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3856 | goto failed; |
3857 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3858 | value = ast2obj_expr(state, o->v.For.iter); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3859 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3860 | if (PyObject_SetAttr(result, state->iter, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3861 | goto failed; |
3862 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3863 | value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3864 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3865 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3866 | goto failed; |
3867 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3868 | value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3869 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3870 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3871 | goto failed; |
3872 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3873 | value = ast2obj_string(state, o->v.For.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3874 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3875 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3876 | goto failed; |
3877 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3878 | break; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3879 | case AsyncFor_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3880 | tp = (PyTypeObject *)state->AsyncFor_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3881 | result = PyType_GenericNew(tp, NULL, NULL); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3882 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3883 | value = ast2obj_expr(state, o->v.AsyncFor.target); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3884 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3885 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3886 | goto failed; |
3887 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3888 | value = ast2obj_expr(state, o->v.AsyncFor.iter); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3889 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3890 | if (PyObject_SetAttr(result, state->iter, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3891 | goto failed; |
3892 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3893 | value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body, |
3894 | ast2obj_stmt); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3895 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3896 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3897 | goto failed; |
3898 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3899 | value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse, |
3900 | ast2obj_stmt); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3901 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3902 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3903 | goto failed; |
3904 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3905 | value = ast2obj_string(state, o->v.AsyncFor.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3906 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3907 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3908 | goto failed; |
3909 | Py_DECREF(value); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3910 | break; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3911 | case While_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3912 | tp = (PyTypeObject *)state->While_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3913 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3914 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3915 | value = ast2obj_expr(state, o->v.While.test); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3916 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3917 | if (PyObject_SetAttr(result, state->test, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3918 | goto failed; |
3919 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3920 | value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3921 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3922 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3923 | goto failed; |
3924 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3925 | value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3926 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3927 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3928 | goto failed; |
3929 | Py_DECREF(value); | ||||
3930 | break; | ||||
3931 | case If_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3932 | tp = (PyTypeObject *)state->If_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3933 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3934 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3935 | value = ast2obj_expr(state, o->v.If.test); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3936 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3937 | if (PyObject_SetAttr(result, state->test, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3938 | goto failed; |
3939 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3940 | value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3941 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3942 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3943 | goto failed; |
3944 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3945 | value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3946 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3947 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3948 | goto failed; |
3949 | Py_DECREF(value); | ||||
3950 | break; | ||||
3951 | case With_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3952 | tp = (PyTypeObject *)state->With_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3953 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3954 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3955 | value = ast2obj_list(state, (asdl_seq*)o->v.With.items, |
3956 | ast2obj_withitem); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3957 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3958 | if (PyObject_SetAttr(result, state->items, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3959 | goto failed; |
3960 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3961 | value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3962 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3963 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3964 | goto failed; |
3965 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3966 | value = ast2obj_string(state, o->v.With.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3967 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3968 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3969 | goto failed; |
3970 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 3971 | break; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3972 | case AsyncWith_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3973 | tp = (PyTypeObject *)state->AsyncWith_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 3974 | result = PyType_GenericNew(tp, NULL, NULL); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3975 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3976 | value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items, |
3977 | ast2obj_withitem); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3978 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3979 | if (PyObject_SetAttr(result, state->items, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3980 | goto failed; |
3981 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 3982 | value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body, |
3983 | ast2obj_stmt); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3984 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3985 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3986 | goto failed; |
3987 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3988 | value = ast2obj_string(state, o->v.AsyncWith.type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3989 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 3990 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 3991 | goto failed; |
3992 | Py_DECREF(value); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 3993 | break; |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 3994 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4010 | case Raise_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4011 | tp = (PyTypeObject *)state->Raise_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4012 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4013 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4014 | value = ast2obj_expr(state, o->v.Raise.exc); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4015 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4016 | if (PyObject_SetAttr(result, state->exc, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4017 | goto failed; |
4018 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4019 | value = ast2obj_expr(state, o->v.Raise.cause); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4020 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4021 | if (PyObject_SetAttr(result, state->cause, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4022 | goto failed; |
4023 | Py_DECREF(value); | ||||
4024 | break; | ||||
4025 | case Try_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4026 | tp = (PyTypeObject *)state->Try_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4027 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4028 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4029 | value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4030 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4031 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4032 | goto failed; |
4033 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4034 | value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers, |
4035 | ast2obj_excepthandler); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4036 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4037 | if (PyObject_SetAttr(result, state->handlers, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4038 | goto failed; |
4039 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4040 | value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4041 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4042 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4043 | goto failed; |
4044 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4045 | value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody, |
4046 | ast2obj_stmt); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4047 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4048 | if (PyObject_SetAttr(result, state->finalbody, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4049 | goto failed; |
4050 | Py_DECREF(value); | ||||
4051 | break; | ||||
4052 | case Assert_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4053 | tp = (PyTypeObject *)state->Assert_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4054 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4055 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4056 | value = ast2obj_expr(state, o->v.Assert.test); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4057 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4058 | if (PyObject_SetAttr(result, state->test, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4059 | goto failed; |
4060 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4061 | value = ast2obj_expr(state, o->v.Assert.msg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4062 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4063 | if (PyObject_SetAttr(result, state->msg, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4064 | goto failed; |
4065 | Py_DECREF(value); | ||||
4066 | break; | ||||
4067 | case Import_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4068 | tp = (PyTypeObject *)state->Import_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4069 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4070 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4071 | value = ast2obj_list(state, (asdl_seq*)o->v.Import.names, |
4072 | ast2obj_alias); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4073 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4074 | if (PyObject_SetAttr(result, state->names, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4075 | goto failed; |
4076 | Py_DECREF(value); | ||||
4077 | break; | ||||
4078 | case ImportFrom_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4079 | tp = (PyTypeObject *)state->ImportFrom_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4080 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4081 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4082 | value = ast2obj_identifier(state, o->v.ImportFrom.module); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4083 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4084 | if (PyObject_SetAttr(result, state->module, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4085 | goto failed; |
4086 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4087 | value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names, |
4088 | ast2obj_alias); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4089 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4090 | if (PyObject_SetAttr(result, state->names, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4091 | goto failed; |
4092 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4093 | value = ast2obj_int(state, o->v.ImportFrom.level); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4094 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4095 | if (PyObject_SetAttr(result, state->level, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4096 | goto failed; |
4097 | Py_DECREF(value); | ||||
4098 | break; | ||||
4099 | case Global_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4100 | tp = (PyTypeObject *)state->Global_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4101 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4102 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4103 | value = ast2obj_list(state, (asdl_seq*)o->v.Global.names, |
4104 | ast2obj_identifier); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4105 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4106 | if (PyObject_SetAttr(result, state->names, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4107 | goto failed; |
4108 | Py_DECREF(value); | ||||
4109 | break; | ||||
4110 | case Nonlocal_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4111 | tp = (PyTypeObject *)state->Nonlocal_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4112 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4113 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4114 | value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names, |
4115 | ast2obj_identifier); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4116 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4117 | if (PyObject_SetAttr(result, state->names, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4118 | goto failed; |
4119 | Py_DECREF(value); | ||||
4120 | break; | ||||
4121 | case Expr_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4122 | tp = (PyTypeObject *)state->Expr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4123 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4124 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4125 | value = ast2obj_expr(state, o->v.Expr.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4126 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4127 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4128 | goto failed; |
4129 | Py_DECREF(value); | ||||
4130 | break; | ||||
4131 | case Pass_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4132 | tp = (PyTypeObject *)state->Pass_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4133 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4134 | if (!result) goto failed; |
4135 | break; | ||||
4136 | case Break_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4137 | tp = (PyTypeObject *)state->Break_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4138 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4139 | if (!result) goto failed; |
4140 | break; | ||||
4141 | case Continue_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4142 | tp = (PyTypeObject *)state->Continue_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4143 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4144 | if (!result) goto failed; |
4145 | break; | ||||
4146 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4147 | value = ast2obj_int(state, o->lineno); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4148 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4149 | if (PyObject_SetAttr(result, state->lineno, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4150 | goto failed; |
4151 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4152 | value = ast2obj_int(state, o->col_offset); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4153 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4154 | if (PyObject_SetAttr(result, state->col_offset, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4155 | goto failed; |
4156 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4157 | value = ast2obj_int(state, o->end_lineno); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4158 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4159 | if (PyObject_SetAttr(result, state->end_lineno, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4160 | goto failed; |
4161 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4162 | value = ast2obj_int(state, o->end_col_offset); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4163 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4164 | if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4165 | goto failed; |
4166 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4167 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4168 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4169 | Py_XDECREF(value); |
4170 | Py_XDECREF(result); | ||||
4171 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4172 | } |
4173 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4174 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4175 | ast2obj_expr(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4176 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4177 | expr_ty o = (expr_ty)_o; |
4178 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4179 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4180 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4181 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4182 | } |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4183 | switch (o->kind) { |
4184 | case BoolOp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4185 | tp = (PyTypeObject *)state->BoolOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4186 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4187 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4188 | value = ast2obj_boolop(state, o->v.BoolOp.op); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4189 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4190 | if (PyObject_SetAttr(result, state->op, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4191 | goto failed; |
4192 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4193 | value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values, |
4194 | ast2obj_expr); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4195 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4196 | if (PyObject_SetAttr(result, state->values, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4197 | goto failed; |
4198 | Py_DECREF(value); | ||||
4199 | break; | ||||
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4200 | case NamedExpr_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4201 | tp = (PyTypeObject *)state->NamedExpr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4202 | result = PyType_GenericNew(tp, NULL, NULL); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4203 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4204 | value = ast2obj_expr(state, o->v.NamedExpr.target); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4205 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4206 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4207 | goto failed; |
4208 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4209 | value = ast2obj_expr(state, o->v.NamedExpr.value); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4210 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4211 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 4212 | goto failed; |
4213 | Py_DECREF(value); | ||||
4214 | break; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4215 | case BinOp_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4216 | tp = (PyTypeObject *)state->BinOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4217 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4218 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4219 | value = ast2obj_expr(state, o->v.BinOp.left); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4220 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4221 | if (PyObject_SetAttr(result, state->left, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4222 | goto failed; |
4223 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4224 | value = ast2obj_operator(state, o->v.BinOp.op); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4225 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4226 | if (PyObject_SetAttr(result, state->op, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4227 | goto failed; |
4228 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4229 | value = ast2obj_expr(state, o->v.BinOp.right); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4230 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4231 | if (PyObject_SetAttr(result, state->right, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4232 | goto failed; |
4233 | Py_DECREF(value); | ||||
4234 | break; | ||||
4235 | case UnaryOp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4236 | tp = (PyTypeObject *)state->UnaryOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4237 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4238 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4239 | value = ast2obj_unaryop(state, o->v.UnaryOp.op); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4240 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4241 | if (PyObject_SetAttr(result, state->op, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4242 | goto failed; |
4243 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4244 | value = ast2obj_expr(state, o->v.UnaryOp.operand); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4245 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4246 | if (PyObject_SetAttr(result, state->operand, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4247 | goto failed; |
4248 | Py_DECREF(value); | ||||
4249 | break; | ||||
4250 | case Lambda_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4251 | tp = (PyTypeObject *)state->Lambda_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4252 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4253 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4254 | value = ast2obj_arguments(state, o->v.Lambda.args); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4255 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4256 | if (PyObject_SetAttr(result, state->args, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4257 | goto failed; |
4258 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4259 | value = ast2obj_expr(state, o->v.Lambda.body); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4260 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4261 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4262 | goto failed; |
4263 | Py_DECREF(value); | ||||
4264 | break; | ||||
4265 | case IfExp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4266 | tp = (PyTypeObject *)state->IfExp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4267 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4268 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4269 | value = ast2obj_expr(state, o->v.IfExp.test); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4270 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4271 | if (PyObject_SetAttr(result, state->test, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4272 | goto failed; |
4273 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4274 | value = ast2obj_expr(state, o->v.IfExp.body); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4275 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4276 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4277 | goto failed; |
4278 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4279 | value = ast2obj_expr(state, o->v.IfExp.orelse); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4280 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4281 | if (PyObject_SetAttr(result, state->orelse, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4282 | goto failed; |
4283 | Py_DECREF(value); | ||||
4284 | break; | ||||
4285 | case Dict_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4286 | tp = (PyTypeObject *)state->Dict_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4287 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4288 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4289 | value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4290 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4291 | if (PyObject_SetAttr(result, state->keys, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4292 | goto failed; |
4293 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4294 | value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4295 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4296 | if (PyObject_SetAttr(result, state->values, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4297 | goto failed; |
4298 | Py_DECREF(value); | ||||
4299 | break; | ||||
4300 | case Set_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4301 | tp = (PyTypeObject *)state->Set_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4302 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4303 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4304 | value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4305 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4306 | if (PyObject_SetAttr(result, state->elts, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4307 | goto failed; |
4308 | Py_DECREF(value); | ||||
4309 | break; | ||||
4310 | case ListComp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4311 | tp = (PyTypeObject *)state->ListComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4312 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4313 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4314 | value = ast2obj_expr(state, o->v.ListComp.elt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4315 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4316 | if (PyObject_SetAttr(result, state->elt, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4317 | goto failed; |
4318 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4319 | value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4320 | ast2obj_comprehension); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4321 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4322 | if (PyObject_SetAttr(result, state->generators, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4323 | goto failed; |
4324 | Py_DECREF(value); | ||||
4325 | break; | ||||
4326 | case SetComp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4327 | tp = (PyTypeObject *)state->SetComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4328 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4329 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4330 | value = ast2obj_expr(state, o->v.SetComp.elt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4331 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4332 | if (PyObject_SetAttr(result, state->elt, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4333 | goto failed; |
4334 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4335 | value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4336 | ast2obj_comprehension); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4337 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4338 | if (PyObject_SetAttr(result, state->generators, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4339 | goto failed; |
4340 | Py_DECREF(value); | ||||
4341 | break; | ||||
4342 | case DictComp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4343 | tp = (PyTypeObject *)state->DictComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4344 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4345 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4346 | value = ast2obj_expr(state, o->v.DictComp.key); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4347 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4348 | if (PyObject_SetAttr(result, state->key, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4349 | goto failed; |
4350 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4351 | value = ast2obj_expr(state, o->v.DictComp.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4352 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4353 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4354 | goto failed; |
4355 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4356 | value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4357 | ast2obj_comprehension); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4358 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4359 | if (PyObject_SetAttr(result, state->generators, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4360 | goto failed; |
4361 | Py_DECREF(value); | ||||
4362 | break; | ||||
4363 | case GeneratorExp_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4364 | tp = (PyTypeObject *)state->GeneratorExp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4365 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4366 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4367 | value = ast2obj_expr(state, o->v.GeneratorExp.elt); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4368 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4369 | if (PyObject_SetAttr(result, state->elt, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4370 | goto failed; |
4371 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4372 | value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators, |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4373 | ast2obj_comprehension); |
4374 | if (!value) goto failed; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4375 | if (PyObject_SetAttr(result, state->generators, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4376 | goto failed; |
4377 | Py_DECREF(value); | ||||
4378 | break; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 4379 | case Await_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4380 | tp = (PyTypeObject *)state->Await_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4381 | result = PyType_GenericNew(tp, NULL, NULL); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 4382 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4383 | value = ast2obj_expr(state, o->v.Await.value); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 4384 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4385 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 4386 | goto failed; |
4387 | Py_DECREF(value); | ||||
4388 | break; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4389 | case Yield_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4390 | tp = (PyTypeObject *)state->Yield_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4391 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4392 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4393 | value = ast2obj_expr(state, o->v.Yield.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4394 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4395 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4396 | goto failed; |
4397 | Py_DECREF(value); | ||||
4398 | break; | ||||
4399 | case YieldFrom_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4400 | tp = (PyTypeObject *)state->YieldFrom_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4401 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4402 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4403 | value = ast2obj_expr(state, o->v.YieldFrom.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4404 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4405 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4406 | goto failed; |
4407 | Py_DECREF(value); | ||||
4408 | break; | ||||
4409 | case Compare_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4410 | tp = (PyTypeObject *)state->Compare_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4411 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4412 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4413 | value = ast2obj_expr(state, o->v.Compare.left); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4414 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4415 | if (PyObject_SetAttr(result, state->left, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4416 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4423 | PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i))); |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4424 | } |
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 4425 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4426 | if (PyObject_SetAttr(result, state->ops, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4427 | goto failed; |
Martin v. Löwis | 03e5bc0 | 2006-03-02 00:31:27 +0000 | [diff] [blame] | 4428 | Py_DECREF(value); |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4429 | value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators, |
4430 | ast2obj_expr); | ||||
Martin v. Löwis | 49c5da1 | 2006-03-01 22:49:05 +0000 | [diff] [blame] | 4431 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4432 | if (PyObject_SetAttr(result, state->comparators, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4433 | goto failed; |
Martin v. Löwis | 03e5bc0 | 2006-03-02 00:31:27 +0000 | [diff] [blame] | 4434 | Py_DECREF(value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4435 | break; |
4436 | case Call_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4437 | tp = (PyTypeObject *)state->Call_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4438 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4439 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4440 | value = ast2obj_expr(state, o->v.Call.func); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4441 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4442 | if (PyObject_SetAttr(result, state->func, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4443 | goto failed; |
4444 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4445 | value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4446 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4447 | if (PyObject_SetAttr(result, state->args, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4448 | goto failed; |
4449 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4450 | value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords, |
4451 | ast2obj_keyword); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4452 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4453 | if (PyObject_SetAttr(result, state->keywords, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4454 | goto failed; |
4455 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4456 | break; |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4457 | case FormattedValue_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4458 | tp = (PyTypeObject *)state->FormattedValue_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4459 | result = PyType_GenericNew(tp, NULL, NULL); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4460 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4461 | value = ast2obj_expr(state, o->v.FormattedValue.value); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4462 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4463 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4464 | goto failed; |
4465 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4466 | value = ast2obj_int(state, o->v.FormattedValue.conversion); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4467 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4468 | if (PyObject_SetAttr(result, state->conversion, value) == -1) |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4469 | goto failed; |
4470 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4471 | value = ast2obj_expr(state, o->v.FormattedValue.format_spec); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4472 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4473 | if (PyObject_SetAttr(result, state->format_spec, value) == -1) |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4474 | goto failed; |
4475 | Py_DECREF(value); | ||||
4476 | break; | ||||
4477 | case JoinedStr_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4478 | tp = (PyTypeObject *)state->JoinedStr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4479 | result = PyType_GenericNew(tp, NULL, NULL); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4480 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4481 | value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values, |
4482 | ast2obj_expr); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4483 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4484 | if (PyObject_SetAttr(result, state->values, value) == -1) |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 4485 | goto failed; |
4486 | Py_DECREF(value); | ||||
4487 | break; | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 4488 | case Constant_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4489 | tp = (PyTypeObject *)state->Constant_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4490 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 4491 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4492 | value = ast2obj_constant(state, o->v.Constant.value); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 4493 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4494 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 4495 | goto failed; |
4496 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4497 | value = ast2obj_string(state, o->v.Constant.kind); |
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 4498 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4499 | if (PyObject_SetAttr(result, state->kind, value) == -1) |
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 4500 | goto failed; |
4501 | Py_DECREF(value); | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 4502 | break; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4503 | case Attribute_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4504 | tp = (PyTypeObject *)state->Attribute_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4505 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4506 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4507 | value = ast2obj_expr(state, o->v.Attribute.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4508 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4509 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4510 | goto failed; |
4511 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4512 | value = ast2obj_identifier(state, o->v.Attribute.attr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4513 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4514 | if (PyObject_SetAttr(result, state->attr, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4515 | goto failed; |
4516 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4517 | value = ast2obj_expr_context(state, o->v.Attribute.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4518 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4519 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4520 | goto failed; |
4521 | Py_DECREF(value); | ||||
4522 | break; | ||||
4523 | case Subscript_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4524 | tp = (PyTypeObject *)state->Subscript_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4525 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4526 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4527 | value = ast2obj_expr(state, o->v.Subscript.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4528 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4529 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4530 | goto failed; |
4531 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4532 | value = ast2obj_expr(state, o->v.Subscript.slice); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4533 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4534 | if (PyObject_SetAttr(result, state->slice, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4535 | goto failed; |
4536 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4537 | value = ast2obj_expr_context(state, o->v.Subscript.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4538 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4539 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4540 | goto failed; |
4541 | Py_DECREF(value); | ||||
4542 | break; | ||||
4543 | case Starred_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4544 | tp = (PyTypeObject *)state->Starred_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4545 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4546 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4547 | value = ast2obj_expr(state, o->v.Starred.value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4548 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4549 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4550 | goto failed; |
4551 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4552 | value = ast2obj_expr_context(state, o->v.Starred.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4553 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4554 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4555 | goto failed; |
4556 | Py_DECREF(value); | ||||
4557 | break; | ||||
4558 | case Name_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4559 | tp = (PyTypeObject *)state->Name_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4560 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4561 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4562 | value = ast2obj_identifier(state, o->v.Name.id); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4563 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4564 | if (PyObject_SetAttr(result, state->id, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4565 | goto failed; |
4566 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4567 | value = ast2obj_expr_context(state, o->v.Name.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4568 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4569 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4570 | goto failed; |
4571 | Py_DECREF(value); | ||||
4572 | break; | ||||
4573 | case List_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4574 | tp = (PyTypeObject *)state->List_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4575 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4576 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4577 | value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4578 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4579 | if (PyObject_SetAttr(result, state->elts, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4580 | goto failed; |
4581 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4582 | value = ast2obj_expr_context(state, o->v.List.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4583 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4584 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4585 | goto failed; |
4586 | Py_DECREF(value); | ||||
4587 | break; | ||||
4588 | case Tuple_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4589 | tp = (PyTypeObject *)state->Tuple_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4590 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4591 | if (!result) goto failed; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4592 | value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4593 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4594 | if (PyObject_SetAttr(result, state->elts, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4595 | goto failed; |
4596 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4597 | value = ast2obj_expr_context(state, o->v.Tuple.ctx); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4598 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4599 | if (PyObject_SetAttr(result, state->ctx, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4600 | goto failed; |
4601 | Py_DECREF(value); | ||||
4602 | break; | ||||
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4603 | case Slice_kind: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4604 | tp = (PyTypeObject *)state->Slice_type; |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4605 | result = PyType_GenericNew(tp, NULL, NULL); |
4606 | if (!result) goto failed; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4607 | value = ast2obj_expr(state, o->v.Slice.lower); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4608 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4609 | if (PyObject_SetAttr(result, state->lower, value) == -1) |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4610 | goto failed; |
4611 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4612 | value = ast2obj_expr(state, o->v.Slice.upper); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4613 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4614 | if (PyObject_SetAttr(result, state->upper, value) == -1) |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4615 | goto failed; |
4616 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4617 | value = ast2obj_expr(state, o->v.Slice.step); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4618 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4619 | if (PyObject_SetAttr(result, state->step, value) == -1) |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 4620 | goto failed; |
4621 | Py_DECREF(value); | ||||
4622 | break; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4623 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4624 | value = ast2obj_int(state, o->lineno); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4625 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4626 | if (PyObject_SetAttr(result, state->lineno, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4627 | goto failed; |
4628 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4629 | value = ast2obj_int(state, o->col_offset); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4630 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4631 | if (PyObject_SetAttr(result, state->col_offset, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4632 | goto failed; |
4633 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4634 | value = ast2obj_int(state, o->end_lineno); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4635 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4636 | if (PyObject_SetAttr(result, state->end_lineno, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4637 | goto failed; |
4638 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4639 | value = ast2obj_int(state, o->end_col_offset); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4640 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4641 | if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4642 | goto failed; |
4643 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4644 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4645 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4646 | Py_XDECREF(value); |
4647 | Py_XDECREF(result); | ||||
4648 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4649 | } |
4650 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4651 | PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4652 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4653 | switch(o) { |
4654 | case Load: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4655 | Py_INCREF(state->Load_singleton); |
4656 | return state->Load_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4657 | case Store: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4658 | Py_INCREF(state->Store_singleton); |
4659 | return state->Store_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4660 | case Del: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4661 | Py_INCREF(state->Del_singleton); |
4662 | return state->Del_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4663 | } |
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 4664 | Py_UNREACHABLE(); |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4665 | } |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4666 | PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4667 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4668 | switch(o) { |
4669 | case And: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4670 | Py_INCREF(state->And_singleton); |
4671 | return state->And_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4672 | case Or: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4673 | Py_INCREF(state->Or_singleton); |
4674 | return state->Or_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4675 | } |
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 4676 | Py_UNREACHABLE(); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4677 | } |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4678 | PyObject* ast2obj_operator(struct ast_state *state, operator_ty o) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4679 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4680 | switch(o) { |
4681 | case Add: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4682 | Py_INCREF(state->Add_singleton); |
4683 | return state->Add_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4684 | case Sub: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4685 | Py_INCREF(state->Sub_singleton); |
4686 | return state->Sub_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4687 | case Mult: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4688 | Py_INCREF(state->Mult_singleton); |
4689 | return state->Mult_singleton; | ||||
Benjamin Peterson | d51374e | 2014-04-09 23:55:56 -0400 | [diff] [blame] | 4690 | case MatMult: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4691 | Py_INCREF(state->MatMult_singleton); |
4692 | return state->MatMult_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4693 | case Div: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4694 | Py_INCREF(state->Div_singleton); |
4695 | return state->Div_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4696 | case Mod: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4697 | Py_INCREF(state->Mod_singleton); |
4698 | return state->Mod_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4699 | case Pow: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4700 | Py_INCREF(state->Pow_singleton); |
4701 | return state->Pow_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4702 | case LShift: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4703 | Py_INCREF(state->LShift_singleton); |
4704 | return state->LShift_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4705 | case RShift: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4706 | Py_INCREF(state->RShift_singleton); |
4707 | return state->RShift_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4708 | case BitOr: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4709 | Py_INCREF(state->BitOr_singleton); |
4710 | return state->BitOr_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4711 | case BitXor: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4712 | Py_INCREF(state->BitXor_singleton); |
4713 | return state->BitXor_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4714 | case BitAnd: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4715 | Py_INCREF(state->BitAnd_singleton); |
4716 | return state->BitAnd_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4717 | case FloorDiv: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4718 | Py_INCREF(state->FloorDiv_singleton); |
4719 | return state->FloorDiv_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4720 | } |
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 4721 | Py_UNREACHABLE(); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4722 | } |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4723 | PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4724 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4725 | switch(o) { |
4726 | case Invert: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4727 | Py_INCREF(state->Invert_singleton); |
4728 | return state->Invert_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4729 | case Not: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4730 | Py_INCREF(state->Not_singleton); |
4731 | return state->Not_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4732 | case UAdd: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4733 | Py_INCREF(state->UAdd_singleton); |
4734 | return state->UAdd_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4735 | case USub: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4736 | Py_INCREF(state->USub_singleton); |
4737 | return state->USub_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4738 | } |
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 4739 | Py_UNREACHABLE(); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4740 | } |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4741 | PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4742 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4743 | switch(o) { |
4744 | case Eq: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4745 | Py_INCREF(state->Eq_singleton); |
4746 | return state->Eq_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4747 | case NotEq: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4748 | Py_INCREF(state->NotEq_singleton); |
4749 | return state->NotEq_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4750 | case Lt: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4751 | Py_INCREF(state->Lt_singleton); |
4752 | return state->Lt_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4753 | case LtE: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4754 | Py_INCREF(state->LtE_singleton); |
4755 | return state->LtE_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4756 | case Gt: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4757 | Py_INCREF(state->Gt_singleton); |
4758 | return state->Gt_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4759 | case GtE: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4760 | Py_INCREF(state->GtE_singleton); |
4761 | return state->GtE_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4762 | case Is: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4763 | Py_INCREF(state->Is_singleton); |
4764 | return state->Is_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4765 | case IsNot: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4766 | Py_INCREF(state->IsNot_singleton); |
4767 | return state->IsNot_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4768 | case In: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4769 | Py_INCREF(state->In_singleton); |
4770 | return state->In_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4771 | case NotIn: |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4772 | Py_INCREF(state->NotIn_singleton); |
4773 | return state->NotIn_singleton; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4774 | } |
Batuhan Taskaya | 091951a | 2020-05-06 17:29:32 +0300 | [diff] [blame] | 4775 | Py_UNREACHABLE(); |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4776 | } |
4777 | PyObject* | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4778 | ast2obj_comprehension(struct ast_state *state, void* _o) |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4779 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4780 | comprehension_ty o = (comprehension_ty)_o; |
4781 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4782 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4783 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4784 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4785 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4786 | tp = (PyTypeObject *)state->comprehension_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4787 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4788 | if (!result) return NULL; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4789 | value = ast2obj_expr(state, o->target); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4790 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4791 | if (PyObject_SetAttr(result, state->target, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4792 | goto failed; |
4793 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4794 | value = ast2obj_expr(state, o->iter); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4795 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4796 | if (PyObject_SetAttr(result, state->iter, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4797 | goto failed; |
4798 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4799 | value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4800 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4801 | if (PyObject_SetAttr(result, state->ifs, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4802 | goto failed; |
4803 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4804 | value = ast2obj_int(state, o->is_async); |
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 4805 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4806 | if (PyObject_SetAttr(result, state->is_async, value) == -1) |
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 4807 | goto failed; |
4808 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4809 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4810 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4811 | Py_XDECREF(value); |
4812 | Py_XDECREF(result); | ||||
4813 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4814 | } |
4815 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4816 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4817 | ast2obj_excepthandler(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4818 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4819 | excepthandler_ty o = (excepthandler_ty)_o; |
4820 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4821 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4822 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4823 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4824 | } |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4825 | switch (o->kind) { |
4826 | case ExceptHandler_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4827 | tp = (PyTypeObject *)state->ExceptHandler_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4828 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4829 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4830 | value = ast2obj_expr(state, o->v.ExceptHandler.type); |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 4831 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4832 | if (PyObject_SetAttr(result, state->type, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4833 | goto failed; |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 4834 | Py_DECREF(value); |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4835 | value = ast2obj_identifier(state, o->v.ExceptHandler.name); |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 4836 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4837 | if (PyObject_SetAttr(result, state->name, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4838 | goto failed; |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 4839 | Py_DECREF(value); |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4840 | value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body, |
4841 | ast2obj_stmt); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4842 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4843 | if (PyObject_SetAttr(result, state->body, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4844 | goto failed; |
4845 | Py_DECREF(value); | ||||
4846 | break; | ||||
4847 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4848 | value = ast2obj_int(state, o->lineno); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4849 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4850 | if (PyObject_SetAttr(result, state->lineno, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4851 | goto failed; |
4852 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4853 | value = ast2obj_int(state, o->col_offset); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4854 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4855 | if (PyObject_SetAttr(result, state->col_offset, value) < 0) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4856 | goto failed; |
4857 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4858 | value = ast2obj_int(state, o->end_lineno); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4859 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4860 | if (PyObject_SetAttr(result, state->end_lineno, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4861 | goto failed; |
4862 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4863 | value = ast2obj_int(state, o->end_col_offset); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4864 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4865 | if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4866 | goto failed; |
4867 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4868 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4869 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4870 | Py_XDECREF(value); |
4871 | Py_XDECREF(result); | ||||
4872 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4873 | } |
4874 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4875 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4876 | ast2obj_arguments(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4877 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4878 | arguments_ty o = (arguments_ty)_o; |
4879 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4880 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4881 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4882 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4883 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4884 | tp = (PyTypeObject *)state->arguments_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4885 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4886 | if (!result) return NULL; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4887 | value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg); |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 4888 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4889 | if (PyObject_SetAttr(result, state->posonlyargs, value) == -1) |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 4890 | goto failed; |
4891 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4892 | value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg); |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 4893 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4894 | if (PyObject_SetAttr(result, state->args, value) == -1) |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 4895 | goto failed; |
4896 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4897 | value = ast2obj_arg(state, o->vararg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4898 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4899 | if (PyObject_SetAttr(result, state->vararg, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4900 | goto failed; |
4901 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4902 | value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4903 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4904 | if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4905 | goto failed; |
4906 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4907 | value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4908 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4909 | if (PyObject_SetAttr(result, state->kw_defaults, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4910 | goto failed; |
4911 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4912 | value = ast2obj_arg(state, o->kwarg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4913 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4914 | if (PyObject_SetAttr(result, state->kwarg, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4915 | goto failed; |
4916 | Py_DECREF(value); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 4917 | value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4918 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4919 | if (PyObject_SetAttr(result, state->defaults, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4920 | goto failed; |
4921 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4922 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4923 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4924 | Py_XDECREF(value); |
4925 | Py_XDECREF(result); | ||||
4926 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4927 | } |
4928 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 4929 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4930 | ast2obj_arg(struct ast_state *state, void* _o) |
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 4931 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4932 | arg_ty o = (arg_ty)_o; |
4933 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4934 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4935 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4936 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4937 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4938 | tp = (PyTypeObject *)state->arg_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4939 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4940 | if (!result) return NULL; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4941 | value = ast2obj_identifier(state, o->arg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4942 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4943 | if (PyObject_SetAttr(result, state->arg, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4944 | goto failed; |
4945 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4946 | value = ast2obj_expr(state, o->annotation); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4947 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4948 | if (PyObject_SetAttr(result, state->annotation, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4949 | goto failed; |
4950 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4951 | value = ast2obj_string(state, o->type_comment); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 4952 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4953 | if (PyObject_SetAttr(result, state->type_comment, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 4954 | goto failed; |
4955 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4956 | value = ast2obj_int(state, o->lineno); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 4957 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4958 | if (PyObject_SetAttr(result, state->lineno, value) < 0) |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 4959 | goto failed; |
4960 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4961 | value = ast2obj_int(state, o->col_offset); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 4962 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4963 | if (PyObject_SetAttr(result, state->col_offset, value) < 0) |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 4964 | goto failed; |
4965 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4966 | value = ast2obj_int(state, o->end_lineno); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4967 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4968 | if (PyObject_SetAttr(result, state->end_lineno, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4969 | goto failed; |
4970 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4971 | value = ast2obj_int(state, o->end_col_offset); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4972 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4973 | if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 4974 | goto failed; |
4975 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4976 | return result; |
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 4977 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4978 | Py_XDECREF(value); |
4979 | Py_XDECREF(result); | ||||
4980 | return NULL; | ||||
Neal Norwitz | c150536 | 2006-12-28 06:47:50 +0000 | [diff] [blame] | 4981 | } |
4982 | |||||
4983 | PyObject* | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 4984 | ast2obj_keyword(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 4985 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4986 | keyword_ty o = (keyword_ty)_o; |
4987 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4988 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4989 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 4990 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4991 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4992 | tp = (PyTypeObject *)state->keyword_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 4993 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4994 | if (!result) return NULL; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4995 | value = ast2obj_identifier(state, o->arg); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4996 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 4997 | if (PyObject_SetAttr(result, state->arg, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 4998 | goto failed; |
4999 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5000 | value = ast2obj_expr(state, o->value); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5001 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5002 | if (PyObject_SetAttr(result, state->value, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5003 | goto failed; |
5004 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5005 | value = ast2obj_int(state, o->lineno); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5006 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5007 | if (PyObject_SetAttr(result, state->lineno, value) < 0) |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5008 | goto failed; |
5009 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5010 | value = ast2obj_int(state, o->col_offset); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5011 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5012 | if (PyObject_SetAttr(result, state->col_offset, value) < 0) |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5013 | goto failed; |
5014 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5015 | value = ast2obj_int(state, o->end_lineno); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5016 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5017 | if (PyObject_SetAttr(result, state->end_lineno, value) < 0) |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5018 | goto failed; |
5019 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5020 | value = ast2obj_int(state, o->end_col_offset); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5021 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5022 | if (PyObject_SetAttr(result, state->end_col_offset, value) < 0) |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 5023 | goto failed; |
5024 | Py_DECREF(value); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5025 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 5026 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5027 | Py_XDECREF(value); |
5028 | Py_XDECREF(result); | ||||
5029 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 5030 | } |
5031 | |||||
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 5032 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 5033 | ast2obj_alias(struct ast_state *state, void* _o) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 5034 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5035 | alias_ty o = (alias_ty)_o; |
5036 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5037 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5038 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 5039 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5040 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5041 | tp = (PyTypeObject *)state->alias_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5042 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5043 | if (!result) return NULL; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5044 | value = ast2obj_identifier(state, o->name); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5045 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5046 | if (PyObject_SetAttr(result, state->name, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5047 | goto failed; |
5048 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5049 | value = ast2obj_identifier(state, o->asname); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5050 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5051 | if (PyObject_SetAttr(result, state->asname, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5052 | goto failed; |
5053 | Py_DECREF(value); | ||||
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 5054 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5074 | return result; |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 5075 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5076 | Py_XDECREF(value); |
5077 | Py_XDECREF(result); | ||||
5078 | return NULL; | ||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 5079 | } |
5080 | |||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 5081 | PyObject* |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 5082 | ast2obj_withitem(struct ast_state *state, void* _o) |
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 5083 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5084 | withitem_ty o = (withitem_ty)_o; |
5085 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5086 | PyTypeObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5087 | if (!o) { |
Serhiy Storchaka | 228b12e | 2017-01-23 09:47:21 +0200 | [diff] [blame] | 5088 | Py_RETURN_NONE; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5089 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5090 | tp = (PyTypeObject *)state->withitem_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5091 | result = PyType_GenericNew(tp, NULL, NULL); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5092 | if (!result) return NULL; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5093 | value = ast2obj_expr(state, o->context_expr); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5094 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5095 | if (PyObject_SetAttr(result, state->context_expr, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5096 | goto failed; |
5097 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5098 | value = ast2obj_expr(state, o->optional_vars); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5099 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5100 | if (PyObject_SetAttr(result, state->optional_vars, value) == -1) |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5101 | goto failed; |
5102 | Py_DECREF(value); | ||||
5103 | return result; | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 5104 | failed: |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5105 | Py_XDECREF(value); |
5106 | Py_XDECREF(result); | ||||
5107 | return NULL; | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 5108 | } |
5109 | |||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5110 | PyObject* |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 5111 | ast2obj_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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 5122 | value = ast2obj_pattern(state, o->pattern); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 5123 | 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; | ||||
5138 | failed: | ||||
5139 | Py_XDECREF(value); | ||||
5140 | Py_XDECREF(result); | ||||
5141 | return NULL; | ||||
5142 | } | ||||
5143 | |||||
5144 | PyObject* | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 5145 | ast2obj_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; | ||||
5293 | failed: | ||||
5294 | Py_XDECREF(value); | ||||
5295 | Py_XDECREF(result); | ||||
5296 | return NULL; | ||||
5297 | } | ||||
5298 | |||||
5299 | PyObject* | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 5300 | ast2obj_type_ignore(struct ast_state *state, void* _o) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5301 | { |
5302 | type_ignore_ty o = (type_ignore_ty)_o; | ||||
5303 | PyObject *result = NULL, *value = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5304 | PyTypeObject *tp; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5305 | if (!o) { |
5306 | Py_RETURN_NONE; | ||||
5307 | } | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5308 | switch (o->kind) { |
5309 | case TypeIgnore_kind: | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5310 | tp = (PyTypeObject *)state->TypeIgnore_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5311 | result = PyType_GenericNew(tp, NULL, NULL); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5312 | if (!result) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5313 | value = ast2obj_int(state, o->v.TypeIgnore.lineno); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5314 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5315 | if (PyObject_SetAttr(result, state->lineno, value) == -1) |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5316 | goto failed; |
5317 | Py_DECREF(value); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5318 | value = ast2obj_string(state, o->v.TypeIgnore.tag); |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 5319 | if (!value) goto failed; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5320 | if (PyObject_SetAttr(result, state->tag, value) == -1) |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 5321 | goto failed; |
5322 | Py_DECREF(value); | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5323 | break; |
5324 | } | ||||
5325 | return result; | ||||
5326 | failed: | ||||
5327 | Py_XDECREF(value); | ||||
5328 | Py_XDECREF(result); | ||||
5329 | return NULL; | ||||
5330 | } | ||||
5331 | |||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 5332 | |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5333 | int |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 5334 | obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5335 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5336 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5337 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5338 | PyObject *tmp = NULL; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5339 | PyObject *tp; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5340 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5341 | if (obj == Py_None) { |
5342 | *out = NULL; | ||||
5343 | return 0; | ||||
5344 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5345 | tp = state->Module_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5346 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5347 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5348 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5349 | } |
5350 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5351 | asdl_stmt_seq* body; |
5352 | asdl_type_ignore_seq* type_ignores; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5353 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5354 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5355 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5362 | int res; |
5363 | Py_ssize_t len; | ||||
5364 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5365 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5366 | PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5367 | goto failed; |
5368 | } | ||||
5369 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5370 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5371 | if (body == NULL) goto failed; |
5372 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5373 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5374 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5375 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5376 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5377 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5378 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5379 | if (len != PyList_GET_SIZE(tmp)) { |
5380 | PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration"); | ||||
5381 | goto failed; | ||||
5382 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5383 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5384 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5385 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5386 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5387 | if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5388 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5399 | PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5400 | goto failed; |
5401 | } | ||||
5402 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5403 | type_ignores = _Py_asdl_type_ignore_seq_new(len, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5404 | if (type_ignores == NULL) goto failed; |
5405 | for (i = 0; i < len; i++) { | ||||
5406 | type_ignore_ty val; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5407 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5408 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5409 | res = obj2ast_type_ignore(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5410 | Py_DECREF(tmp2); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5411 | 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 Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5420 | *out = _PyAST_Module(body, type_ignores, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5421 | if (*out == NULL) goto failed; |
5422 | return 0; | ||||
5423 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5424 | tp = state->Interactive_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5425 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5426 | if (isinstance == -1) { |
5427 | return 1; | ||||
5428 | } | ||||
5429 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5430 | asdl_stmt_seq* body; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5431 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5432 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5433 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5440 | int res; |
5441 | Py_ssize_t len; | ||||
5442 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5443 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5444 | PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5445 | goto failed; |
5446 | } | ||||
5447 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5448 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5449 | if (body == NULL) goto failed; |
5450 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5451 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5452 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5453 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5454 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5455 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5456 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5457 | if (len != PyList_GET_SIZE(tmp)) { |
5458 | PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration"); | ||||
5459 | goto failed; | ||||
5460 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5461 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5462 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5463 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5464 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5465 | *out = _PyAST_Interactive(body, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5466 | if (*out == NULL) goto failed; |
5467 | return 0; | ||||
5468 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5469 | tp = state->Expression_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5470 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5471 | if (isinstance == -1) { |
5472 | return 1; | ||||
5473 | } | ||||
5474 | if (isinstance) { | ||||
5475 | expr_ty body; | ||||
5476 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5477 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5478 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5485 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5486 | res = obj2ast_expr(state, tmp, &body, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5487 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5488 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5489 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5490 | *out = _PyAST_Expression(body, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5491 | if (*out == NULL) goto failed; |
5492 | return 0; | ||||
5493 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5494 | tp = state->FunctionType_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5495 | isinstance = PyObject_IsInstance(obj, tp); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5496 | if (isinstance == -1) { |
5497 | return 1; | ||||
5498 | } | ||||
5499 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5500 | asdl_expr_seq* argtypes; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5501 | expr_ty returns; |
5502 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5503 | if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5504 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5515 | PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5516 | goto failed; |
5517 | } | ||||
5518 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5519 | argtypes = _Py_asdl_expr_seq_new(len, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5520 | if (argtypes == NULL) goto failed; |
5521 | for (i = 0; i < len; i++) { | ||||
5522 | expr_ty val; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5523 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5524 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5525 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5526 | Py_DECREF(tmp2); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5527 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5536 | if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5537 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5545 | res = obj2ast_expr(state, tmp, &returns, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5546 | if (res != 0) goto failed; |
5547 | Py_CLEAR(tmp); | ||||
5548 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5549 | *out = _PyAST_FunctionType(argtypes, returns, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5550 | if (*out == NULL) goto failed; |
5551 | return 0; | ||||
5552 | } | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5553 | |
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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5558 | } |
5559 | |||||
5560 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 5561 | obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena* |
5562 | arena) | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5563 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5564 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5565 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5566 | PyObject *tmp = NULL; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5567 | PyObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5568 | int lineno; |
5569 | int col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 5570 | int end_lineno; |
5571 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5572 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5573 | if (obj == Py_None) { |
5574 | *out = NULL; | ||||
5575 | return 0; | ||||
5576 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5577 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5578 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5585 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5586 | res = obj2ast_int(state, tmp, &lineno, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5587 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5588 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5589 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5590 | if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 5591 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5592 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5593 | if (tmp == NULL) { |
5594 | PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt"); | ||||
5595 | return 1; | ||||
5596 | } | ||||
5597 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5598 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5599 | res = obj2ast_int(state, tmp, &col_offset, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5600 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5601 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5602 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5603 | if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 5604 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5612 | res = obj2ast_int(state, tmp, &end_lineno, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 5613 | if (res != 0) goto failed; |
5614 | Py_CLEAR(tmp); | ||||
5615 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5616 | if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 5617 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5625 | res = obj2ast_int(state, tmp, &end_col_offset, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 5626 | if (res != 0) goto failed; |
5627 | Py_CLEAR(tmp); | ||||
5628 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5629 | tp = state->FunctionDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5630 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5631 | if (isinstance == -1) { |
5632 | return 1; | ||||
5633 | } | ||||
5634 | if (isinstance) { | ||||
5635 | identifier name; | ||||
5636 | arguments_ty args; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5637 | asdl_stmt_seq* body; |
5638 | asdl_expr_seq* decorator_list; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5639 | expr_ty returns; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5640 | string type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5641 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5642 | if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5643 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5650 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5651 | res = obj2ast_identifier(state, tmp, &name, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5652 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5653 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5654 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5655 | if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5656 | return 1; |
5657 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5658 | if (tmp == NULL) { |
5659 | PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef"); | ||||
5660 | return 1; | ||||
5661 | } | ||||
5662 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5663 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5664 | res = obj2ast_arguments(state, tmp, &args, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5665 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5666 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5667 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5668 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5669 | return 1; |
5670 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5671 | if (tmp == NULL) { |
5672 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef"); | ||||
5673 | return 1; | ||||
5674 | } | ||||
5675 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5676 | int res; |
5677 | Py_ssize_t len; | ||||
5678 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5679 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5680 | PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5681 | goto failed; |
5682 | } | ||||
5683 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5684 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5685 | if (body == NULL) goto failed; |
5686 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5687 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5688 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5689 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5690 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5691 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5692 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5693 | if (len != PyList_GET_SIZE(tmp)) { |
5694 | PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration"); | ||||
5695 | goto failed; | ||||
5696 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5697 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5698 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5699 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5700 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5701 | if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5702 | return 1; |
5703 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5704 | if (tmp == NULL) { |
5705 | PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef"); | ||||
5706 | return 1; | ||||
5707 | } | ||||
5708 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5709 | int res; |
5710 | Py_ssize_t len; | ||||
5711 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5712 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5713 | PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5714 | goto failed; |
5715 | } | ||||
5716 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5717 | decorator_list = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5718 | if (decorator_list == NULL) goto failed; |
5719 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5720 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5721 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5722 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5723 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5724 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5725 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5726 | 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 Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5730 | asdl_seq_SET(decorator_list, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5731 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5732 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5733 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5734 | if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5735 | return 1; |
5736 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5737 | if (tmp == NULL || tmp == Py_None) { |
5738 | Py_CLEAR(tmp); | ||||
5739 | returns = NULL; | ||||
5740 | } | ||||
5741 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5742 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5743 | res = obj2ast_expr(state, tmp, &returns, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5744 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5745 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5746 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5747 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5748 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5756 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5757 | if (res != 0) goto failed; |
5758 | Py_CLEAR(tmp); | ||||
5759 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5760 | *out = _PyAST_FunctionDef(name, args, body, decorator_list, returns, |
5761 | type_comment, lineno, col_offset, end_lineno, | ||||
5762 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5763 | if (*out == NULL) goto failed; |
5764 | return 0; | ||||
5765 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5766 | tp = state->AsyncFunctionDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5767 | isinstance = PyObject_IsInstance(obj, tp); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5768 | if (isinstance == -1) { |
5769 | return 1; | ||||
5770 | } | ||||
5771 | if (isinstance) { | ||||
5772 | identifier name; | ||||
5773 | arguments_ty args; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5774 | asdl_stmt_seq* body; |
5775 | asdl_expr_seq* decorator_list; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5776 | expr_ty returns; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5777 | string type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5778 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5779 | if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5780 | 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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5787 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5788 | res = obj2ast_identifier(state, tmp, &name, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5789 | if (res != 0) goto failed; |
5790 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5791 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5792 | if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5793 | return 1; |
5794 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5795 | if (tmp == NULL) { |
5796 | PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef"); | ||||
5797 | return 1; | ||||
5798 | } | ||||
5799 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5800 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5801 | res = obj2ast_arguments(state, tmp, &args, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5802 | if (res != 0) goto failed; |
5803 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5804 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5805 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5806 | return 1; |
5807 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5808 | if (tmp == NULL) { |
5809 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef"); | ||||
5810 | return 1; | ||||
5811 | } | ||||
5812 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5813 | int res; |
5814 | Py_ssize_t len; | ||||
5815 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5816 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5817 | PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5818 | goto failed; |
5819 | } | ||||
5820 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5821 | body = _Py_asdl_stmt_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5822 | if (body == NULL) goto failed; |
5823 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5824 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5825 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5826 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5827 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5828 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5829 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5830 | if (len != PyList_GET_SIZE(tmp)) { |
5831 | PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration"); | ||||
5832 | goto failed; | ||||
5833 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5834 | asdl_seq_SET(body, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5835 | } |
5836 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5837 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5838 | if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5839 | return 1; |
5840 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5841 | if (tmp == NULL) { |
5842 | PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef"); | ||||
5843 | return 1; | ||||
5844 | } | ||||
5845 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5846 | int res; |
5847 | Py_ssize_t len; | ||||
5848 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5849 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5850 | PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5851 | goto failed; |
5852 | } | ||||
5853 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5854 | decorator_list = _Py_asdl_expr_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5855 | if (decorator_list == NULL) goto failed; |
5856 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5857 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5858 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5859 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5860 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5861 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5862 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5863 | 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 Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5867 | asdl_seq_SET(decorator_list, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5868 | } |
5869 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5870 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5871 | if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5872 | return 1; |
5873 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5874 | if (tmp == NULL || tmp == Py_None) { |
5875 | Py_CLEAR(tmp); | ||||
5876 | returns = NULL; | ||||
5877 | } | ||||
5878 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5879 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5880 | res = obj2ast_expr(state, tmp, &returns, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5881 | if (res != 0) goto failed; |
5882 | Py_CLEAR(tmp); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5883 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5884 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5885 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5893 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 5894 | if (res != 0) goto failed; |
5895 | Py_CLEAR(tmp); | ||||
5896 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 5897 | *out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list, |
5898 | returns, type_comment, lineno, | ||||
5899 | col_offset, end_lineno, end_col_offset, | ||||
5900 | arena); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 5901 | if (*out == NULL) goto failed; |
5902 | return 0; | ||||
5903 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5904 | tp = state->ClassDef_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5905 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5906 | if (isinstance == -1) { |
5907 | return 1; | ||||
5908 | } | ||||
5909 | if (isinstance) { | ||||
5910 | identifier name; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5911 | asdl_expr_seq* bases; |
5912 | asdl_keyword_seq* keywords; | ||||
5913 | asdl_stmt_seq* body; | ||||
5914 | asdl_expr_seq* decorator_list; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5915 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5916 | if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5917 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5924 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5925 | res = obj2ast_identifier(state, tmp, &name, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5926 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5927 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5928 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5929 | if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5930 | return 1; |
5931 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5932 | if (tmp == NULL) { |
5933 | PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef"); | ||||
5934 | return 1; | ||||
5935 | } | ||||
5936 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5937 | int res; |
5938 | Py_ssize_t len; | ||||
5939 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5940 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5941 | PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5942 | goto failed; |
5943 | } | ||||
5944 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5945 | bases = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5946 | if (bases == NULL) goto failed; |
5947 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5948 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5949 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5950 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5951 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5952 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5953 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5954 | if (len != PyList_GET_SIZE(tmp)) { |
5955 | PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration"); | ||||
5956 | goto failed; | ||||
5957 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5958 | asdl_seq_SET(bases, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5959 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5960 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5961 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5962 | if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5963 | return 1; |
5964 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5965 | if (tmp == NULL) { |
5966 | PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef"); | ||||
5967 | return 1; | ||||
5968 | } | ||||
5969 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5970 | int res; |
5971 | Py_ssize_t len; | ||||
5972 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5973 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 5974 | PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5975 | goto failed; |
5976 | } | ||||
5977 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 5978 | keywords = _Py_asdl_keyword_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5979 | if (keywords == NULL) goto failed; |
5980 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5981 | keyword_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5982 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
5983 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5984 | res = obj2ast_keyword(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 5985 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5986 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 5987 | if (len != PyList_GET_SIZE(tmp)) { |
5988 | PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration"); | ||||
5989 | goto failed; | ||||
5990 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 5991 | asdl_seq_SET(keywords, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5992 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 5993 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5994 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 5995 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 5996 | return 1; |
5997 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 5998 | if (tmp == NULL) { |
5999 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef"); | ||||
6000 | return 1; | ||||
6001 | } | ||||
6002 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6003 | int res; |
6004 | Py_ssize_t len; | ||||
6005 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6006 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6007 | PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6008 | goto failed; |
6009 | } | ||||
6010 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6011 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6012 | if (body == NULL) goto failed; |
6013 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6014 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6015 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6016 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6017 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6018 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6019 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6020 | if (len != PyList_GET_SIZE(tmp)) { |
6021 | PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration"); | ||||
6022 | goto failed; | ||||
6023 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6024 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6025 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6026 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6027 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6028 | if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6029 | return 1; |
6030 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6031 | if (tmp == NULL) { |
6032 | PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef"); | ||||
6033 | return 1; | ||||
6034 | } | ||||
6035 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6036 | int res; |
6037 | Py_ssize_t len; | ||||
6038 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6039 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6040 | PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6041 | goto failed; |
6042 | } | ||||
6043 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6044 | decorator_list = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6045 | if (decorator_list == NULL) goto failed; |
6046 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6047 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6048 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6049 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6050 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6051 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6052 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6053 | 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 Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6057 | asdl_seq_SET(decorator_list, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6058 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6059 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6060 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6061 | *out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list, |
6062 | lineno, col_offset, end_lineno, end_col_offset, | ||||
6063 | arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6064 | if (*out == NULL) goto failed; |
6065 | return 0; | ||||
6066 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6067 | tp = state->Return_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6068 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6069 | if (isinstance == -1) { |
6070 | return 1; | ||||
6071 | } | ||||
6072 | if (isinstance) { | ||||
6073 | expr_ty value; | ||||
6074 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6075 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6076 | return 1; |
6077 | } | ||||
6078 | if (tmp == NULL || tmp == Py_None) { | ||||
6079 | Py_CLEAR(tmp); | ||||
6080 | value = NULL; | ||||
6081 | } | ||||
6082 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6083 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6084 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6085 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6086 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6087 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6088 | *out = _PyAST_Return(value, lineno, col_offset, end_lineno, |
6089 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6090 | if (*out == NULL) goto failed; |
6091 | return 0; | ||||
6092 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6093 | tp = state->Delete_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6094 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6095 | if (isinstance == -1) { |
6096 | return 1; | ||||
6097 | } | ||||
6098 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6099 | asdl_expr_seq* targets; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6100 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6101 | if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6102 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6109 | int res; |
6110 | Py_ssize_t len; | ||||
6111 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6112 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6113 | PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6114 | goto failed; |
6115 | } | ||||
6116 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6117 | targets = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6118 | if (targets == NULL) goto failed; |
6119 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6120 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6121 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6122 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6123 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6124 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6125 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6126 | if (len != PyList_GET_SIZE(tmp)) { |
6127 | PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration"); | ||||
6128 | goto failed; | ||||
6129 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6130 | asdl_seq_SET(targets, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6131 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6132 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6133 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6134 | *out = _PyAST_Delete(targets, lineno, col_offset, end_lineno, |
6135 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6136 | if (*out == NULL) goto failed; |
6137 | return 0; | ||||
6138 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6139 | tp = state->Assign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6140 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6141 | if (isinstance == -1) { |
6142 | return 1; | ||||
6143 | } | ||||
6144 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6145 | asdl_expr_seq* targets; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6146 | expr_ty value; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6147 | string type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6148 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6149 | if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6150 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6157 | int res; |
6158 | Py_ssize_t len; | ||||
6159 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6160 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6161 | PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6162 | goto failed; |
6163 | } | ||||
6164 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6165 | targets = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6166 | if (targets == NULL) goto failed; |
6167 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6168 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6169 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6170 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6171 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6172 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6173 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6174 | if (len != PyList_GET_SIZE(tmp)) { |
6175 | PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration"); | ||||
6176 | goto failed; | ||||
6177 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6178 | asdl_seq_SET(targets, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6179 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6180 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6181 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6182 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6183 | return 1; |
6184 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6185 | if (tmp == NULL) { |
6186 | PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign"); | ||||
6187 | return 1; | ||||
6188 | } | ||||
6189 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6190 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6191 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6192 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6193 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6194 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6195 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6196 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6204 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6205 | if (res != 0) goto failed; |
6206 | Py_CLEAR(tmp); | ||||
6207 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6208 | *out = _PyAST_Assign(targets, value, type_comment, lineno, col_offset, |
6209 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6210 | if (*out == NULL) goto failed; |
6211 | return 0; | ||||
6212 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6213 | tp = state->AugAssign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6214 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6215 | if (isinstance == -1) { |
6216 | return 1; | ||||
6217 | } | ||||
6218 | if (isinstance) { | ||||
6219 | expr_ty target; | ||||
6220 | operator_ty op; | ||||
6221 | expr_ty value; | ||||
6222 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6223 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6224 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6231 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6232 | res = obj2ast_expr(state, tmp, &target, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6233 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6234 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6235 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6236 | if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6237 | return 1; |
6238 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6239 | if (tmp == NULL) { |
6240 | PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign"); | ||||
6241 | return 1; | ||||
6242 | } | ||||
6243 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6244 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6245 | res = obj2ast_operator(state, tmp, &op, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6246 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6247 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6248 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6249 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6250 | return 1; |
6251 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6252 | if (tmp == NULL) { |
6253 | PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign"); | ||||
6254 | return 1; | ||||
6255 | } | ||||
6256 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6257 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6258 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6259 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6260 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6261 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6262 | *out = _PyAST_AugAssign(target, op, value, lineno, col_offset, |
6263 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6264 | if (*out == NULL) goto failed; |
6265 | return 0; | ||||
6266 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6267 | tp = state->AnnAssign_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6268 | isinstance = PyObject_IsInstance(obj, tp); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6269 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6278 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6279 | 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 Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6286 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6287 | res = obj2ast_expr(state, tmp, &target, arena); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6288 | if (res != 0) goto failed; |
6289 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6290 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6291 | if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) { |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6292 | return 1; |
6293 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6294 | if (tmp == NULL) { |
6295 | PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign"); | ||||
6296 | return 1; | ||||
6297 | } | ||||
6298 | else { | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6299 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6300 | res = obj2ast_expr(state, tmp, &annotation, arena); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6301 | if (res != 0) goto failed; |
6302 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6303 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6304 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6305 | return 1; |
6306 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6307 | if (tmp == NULL || tmp == Py_None) { |
6308 | Py_CLEAR(tmp); | ||||
6309 | value = NULL; | ||||
6310 | } | ||||
6311 | else { | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6312 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6313 | res = obj2ast_expr(state, tmp, &value, arena); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6314 | if (res != 0) goto failed; |
6315 | Py_CLEAR(tmp); | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6316 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6317 | if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6318 | 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 Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6325 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6326 | res = obj2ast_int(state, tmp, &simple, arena); |
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6327 | if (res != 0) goto failed; |
6328 | Py_CLEAR(tmp); | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6329 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6330 | *out = _PyAST_AnnAssign(target, annotation, value, simple, lineno, |
6331 | col_offset, end_lineno, end_col_offset, arena); | ||||
Yury Selivanov | f8cb8a1 | 2016-09-08 20:50:03 -0700 | [diff] [blame] | 6332 | if (*out == NULL) goto failed; |
6333 | return 0; | ||||
6334 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6335 | tp = state->For_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6336 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6337 | if (isinstance == -1) { |
6338 | return 1; | ||||
6339 | } | ||||
6340 | if (isinstance) { | ||||
6341 | expr_ty target; | ||||
6342 | expr_ty iter; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6343 | asdl_stmt_seq* body; |
6344 | asdl_stmt_seq* orelse; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6345 | string type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6346 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6347 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6348 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6355 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6356 | res = obj2ast_expr(state, tmp, &target, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6357 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6358 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6359 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6360 | if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6361 | return 1; |
6362 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6363 | if (tmp == NULL) { |
6364 | PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For"); | ||||
6365 | return 1; | ||||
6366 | } | ||||
6367 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6368 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6369 | res = obj2ast_expr(state, tmp, &iter, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6370 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6371 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6372 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6373 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6374 | return 1; |
6375 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6376 | if (tmp == NULL) { |
6377 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For"); | ||||
6378 | return 1; | ||||
6379 | } | ||||
6380 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6381 | int res; |
6382 | Py_ssize_t len; | ||||
6383 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6384 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6385 | PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6386 | goto failed; |
6387 | } | ||||
6388 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6389 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6390 | if (body == NULL) goto failed; |
6391 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6392 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6393 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6394 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6395 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6396 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6397 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6398 | if (len != PyList_GET_SIZE(tmp)) { |
6399 | PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration"); | ||||
6400 | goto failed; | ||||
6401 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6402 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6403 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6404 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6405 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6406 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6407 | return 1; |
6408 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6409 | if (tmp == NULL) { |
6410 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For"); | ||||
6411 | return 1; | ||||
6412 | } | ||||
6413 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6414 | int res; |
6415 | Py_ssize_t len; | ||||
6416 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6417 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6418 | PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6419 | goto failed; |
6420 | } | ||||
6421 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6422 | orelse = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6423 | if (orelse == NULL) goto failed; |
6424 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6425 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6426 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6427 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6428 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6429 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6430 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6431 | if (len != PyList_GET_SIZE(tmp)) { |
6432 | PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration"); | ||||
6433 | goto failed; | ||||
6434 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6435 | asdl_seq_SET(orelse, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6436 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6437 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6438 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6439 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6440 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6448 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6449 | if (res != 0) goto failed; |
6450 | Py_CLEAR(tmp); | ||||
6451 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6452 | *out = _PyAST_For(target, iter, body, orelse, type_comment, lineno, |
6453 | col_offset, end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6454 | if (*out == NULL) goto failed; |
6455 | return 0; | ||||
6456 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6457 | tp = state->AsyncFor_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6458 | isinstance = PyObject_IsInstance(obj, tp); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6459 | if (isinstance == -1) { |
6460 | return 1; | ||||
6461 | } | ||||
6462 | if (isinstance) { | ||||
6463 | expr_ty target; | ||||
6464 | expr_ty iter; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6465 | asdl_stmt_seq* body; |
6466 | asdl_stmt_seq* orelse; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6467 | string type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6468 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6469 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6470 | 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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6477 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6478 | res = obj2ast_expr(state, tmp, &target, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6479 | if (res != 0) goto failed; |
6480 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6481 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6482 | if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6483 | return 1; |
6484 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6485 | if (tmp == NULL) { |
6486 | PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor"); | ||||
6487 | return 1; | ||||
6488 | } | ||||
6489 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6490 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6491 | res = obj2ast_expr(state, tmp, &iter, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6492 | if (res != 0) goto failed; |
6493 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6494 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6495 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6496 | return 1; |
6497 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6498 | if (tmp == NULL) { |
6499 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor"); | ||||
6500 | return 1; | ||||
6501 | } | ||||
6502 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6503 | int res; |
6504 | Py_ssize_t len; | ||||
6505 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6506 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6507 | PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6508 | goto failed; |
6509 | } | ||||
6510 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6511 | body = _Py_asdl_stmt_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6512 | if (body == NULL) goto failed; |
6513 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6514 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6515 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6516 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6517 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6518 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6519 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6520 | if (len != PyList_GET_SIZE(tmp)) { |
6521 | PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration"); | ||||
6522 | goto failed; | ||||
6523 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6524 | asdl_seq_SET(body, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6525 | } |
6526 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6527 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6528 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6529 | return 1; |
6530 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6531 | if (tmp == NULL) { |
6532 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor"); | ||||
6533 | return 1; | ||||
6534 | } | ||||
6535 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6536 | int res; |
6537 | Py_ssize_t len; | ||||
6538 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6539 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6540 | PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6541 | goto failed; |
6542 | } | ||||
6543 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6544 | orelse = _Py_asdl_stmt_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6545 | if (orelse == NULL) goto failed; |
6546 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6547 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6548 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6549 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6550 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6551 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6552 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6553 | if (len != PyList_GET_SIZE(tmp)) { |
6554 | PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration"); | ||||
6555 | goto failed; | ||||
6556 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6557 | asdl_seq_SET(orelse, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6558 | } |
6559 | Py_CLEAR(tmp); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6560 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6561 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6562 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6570 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6571 | if (res != 0) goto failed; |
6572 | Py_CLEAR(tmp); | ||||
6573 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6574 | *out = _PyAST_AsyncFor(target, iter, body, orelse, type_comment, |
6575 | lineno, col_offset, end_lineno, end_col_offset, | ||||
6576 | arena); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6577 | if (*out == NULL) goto failed; |
6578 | return 0; | ||||
6579 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6580 | tp = state->While_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6581 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6582 | if (isinstance == -1) { |
6583 | return 1; | ||||
6584 | } | ||||
6585 | if (isinstance) { | ||||
6586 | expr_ty test; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6587 | asdl_stmt_seq* body; |
6588 | asdl_stmt_seq* orelse; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6589 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6590 | if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6591 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6598 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6599 | res = obj2ast_expr(state, tmp, &test, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6600 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6601 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6602 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6603 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6604 | return 1; |
6605 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6606 | if (tmp == NULL) { |
6607 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While"); | ||||
6608 | return 1; | ||||
6609 | } | ||||
6610 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6611 | int res; |
6612 | Py_ssize_t len; | ||||
6613 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6614 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6615 | PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6616 | goto failed; |
6617 | } | ||||
6618 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6619 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6620 | if (body == NULL) goto failed; |
6621 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6622 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6623 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6624 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6625 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6626 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6627 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6628 | if (len != PyList_GET_SIZE(tmp)) { |
6629 | PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration"); | ||||
6630 | goto failed; | ||||
6631 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6632 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6633 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6634 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6635 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6636 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6637 | return 1; |
6638 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6639 | if (tmp == NULL) { |
6640 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While"); | ||||
6641 | return 1; | ||||
6642 | } | ||||
6643 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6644 | int res; |
6645 | Py_ssize_t len; | ||||
6646 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6647 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6648 | PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6649 | goto failed; |
6650 | } | ||||
6651 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6652 | orelse = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6653 | if (orelse == NULL) goto failed; |
6654 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6655 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6656 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6657 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6658 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6659 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6660 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6661 | if (len != PyList_GET_SIZE(tmp)) { |
6662 | PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration"); | ||||
6663 | goto failed; | ||||
6664 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6665 | asdl_seq_SET(orelse, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6666 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6667 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6668 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6669 | *out = _PyAST_While(test, body, orelse, lineno, col_offset, end_lineno, |
6670 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6671 | if (*out == NULL) goto failed; |
6672 | return 0; | ||||
6673 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6674 | tp = state->If_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6675 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6676 | if (isinstance == -1) { |
6677 | return 1; | ||||
6678 | } | ||||
6679 | if (isinstance) { | ||||
6680 | expr_ty test; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6681 | asdl_stmt_seq* body; |
6682 | asdl_stmt_seq* orelse; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6683 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6684 | if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6685 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6692 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6693 | res = obj2ast_expr(state, tmp, &test, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6694 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6695 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6696 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6697 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6698 | return 1; |
6699 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6700 | if (tmp == NULL) { |
6701 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If"); | ||||
6702 | return 1; | ||||
6703 | } | ||||
6704 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6705 | int res; |
6706 | Py_ssize_t len; | ||||
6707 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6708 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6709 | PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6710 | goto failed; |
6711 | } | ||||
6712 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6713 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6714 | if (body == NULL) goto failed; |
6715 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6716 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6717 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6718 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6719 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6720 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6721 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6722 | if (len != PyList_GET_SIZE(tmp)) { |
6723 | PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration"); | ||||
6724 | goto failed; | ||||
6725 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6726 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6727 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6728 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6729 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6730 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6731 | return 1; |
6732 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6733 | if (tmp == NULL) { |
6734 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If"); | ||||
6735 | return 1; | ||||
6736 | } | ||||
6737 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6738 | int res; |
6739 | Py_ssize_t len; | ||||
6740 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6741 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6742 | PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6743 | goto failed; |
6744 | } | ||||
6745 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6746 | orelse = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6747 | if (orelse == NULL) goto failed; |
6748 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6749 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6750 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6751 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6752 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6753 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6754 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6755 | if (len != PyList_GET_SIZE(tmp)) { |
6756 | PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration"); | ||||
6757 | goto failed; | ||||
6758 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6759 | asdl_seq_SET(orelse, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6760 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6761 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6762 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6763 | *out = _PyAST_If(test, body, orelse, lineno, col_offset, end_lineno, |
6764 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6765 | if (*out == NULL) goto failed; |
6766 | return 0; | ||||
6767 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6768 | tp = state->With_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6769 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6770 | if (isinstance == -1) { |
6771 | return 1; | ||||
6772 | } | ||||
6773 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6774 | asdl_withitem_seq* items; |
6775 | asdl_stmt_seq* body; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6776 | string type_comment; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6777 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6778 | if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6779 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6786 | int res; |
6787 | Py_ssize_t len; | ||||
6788 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6789 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6790 | PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6791 | goto failed; |
6792 | } | ||||
6793 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6794 | items = _Py_asdl_withitem_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6795 | if (items == NULL) goto failed; |
6796 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6797 | withitem_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6798 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6799 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6800 | res = obj2ast_withitem(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6801 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6802 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6803 | if (len != PyList_GET_SIZE(tmp)) { |
6804 | PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration"); | ||||
6805 | goto failed; | ||||
6806 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6807 | asdl_seq_SET(items, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6808 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6809 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6810 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6811 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6812 | return 1; |
6813 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6814 | if (tmp == NULL) { |
6815 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With"); | ||||
6816 | return 1; | ||||
6817 | } | ||||
6818 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6819 | int res; |
6820 | Py_ssize_t len; | ||||
6821 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6822 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6823 | PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6824 | goto failed; |
6825 | } | ||||
6826 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6827 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6828 | if (body == NULL) goto failed; |
6829 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6830 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6831 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6832 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6833 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6834 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6835 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6836 | if (len != PyList_GET_SIZE(tmp)) { |
6837 | PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration"); | ||||
6838 | goto failed; | ||||
6839 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6840 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6841 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 6842 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6843 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6844 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6845 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6853 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6854 | if (res != 0) goto failed; |
6855 | Py_CLEAR(tmp); | ||||
6856 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6857 | *out = _PyAST_With(items, body, type_comment, lineno, col_offset, |
6858 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 6859 | if (*out == NULL) goto failed; |
6860 | return 0; | ||||
6861 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6862 | tp = state->AsyncWith_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6863 | isinstance = PyObject_IsInstance(obj, tp); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6864 | if (isinstance == -1) { |
6865 | return 1; | ||||
6866 | } | ||||
6867 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6868 | asdl_withitem_seq* items; |
6869 | asdl_stmt_seq* body; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6870 | string type_comment; |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6871 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6872 | if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6873 | 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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6880 | int res; |
6881 | Py_ssize_t len; | ||||
6882 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6883 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6884 | PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6885 | goto failed; |
6886 | } | ||||
6887 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6888 | items = _Py_asdl_withitem_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6889 | if (items == NULL) goto failed; |
6890 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6891 | withitem_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6892 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6893 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6894 | res = obj2ast_withitem(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6895 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6896 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6897 | if (len != PyList_GET_SIZE(tmp)) { |
6898 | PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration"); | ||||
6899 | goto failed; | ||||
6900 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6901 | asdl_seq_SET(items, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6902 | } |
6903 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6904 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6905 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6906 | return 1; |
6907 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 6908 | if (tmp == NULL) { |
6909 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith"); | ||||
6910 | return 1; | ||||
6911 | } | ||||
6912 | else { | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6913 | int res; |
6914 | Py_ssize_t len; | ||||
6915 | Py_ssize_t i; | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6916 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 6917 | PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6918 | goto failed; |
6919 | } | ||||
6920 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 6921 | body = _Py_asdl_stmt_seq_new(len, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6922 | if (body == NULL) goto failed; |
6923 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6924 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6925 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
6926 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6927 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 6928 | Py_DECREF(tmp2); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6929 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 6930 | if (len != PyList_GET_SIZE(tmp)) { |
6931 | PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration"); | ||||
6932 | goto failed; | ||||
6933 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 6934 | asdl_seq_SET(body, i, val); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6935 | } |
6936 | Py_CLEAR(tmp); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6937 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6938 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6939 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 6947 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 6948 | if (res != 0) goto failed; |
6949 | Py_CLEAR(tmp); | ||||
6950 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 6951 | *out = _PyAST_AsyncWith(items, body, type_comment, lineno, col_offset, |
6952 | end_lineno, end_col_offset, arena); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 6953 | if (*out == NULL) goto failed; |
6954 | return 0; | ||||
6955 | } | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 6956 | 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 Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7011 | *out = _PyAST_Match(subject, cases, lineno, col_offset, end_lineno, |
7012 | end_col_offset, arena); | ||||
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 7013 | if (*out == NULL) goto failed; |
7014 | return 0; | ||||
7015 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7016 | tp = state->Raise_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7017 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7018 | if (isinstance == -1) { |
7019 | return 1; | ||||
7020 | } | ||||
7021 | if (isinstance) { | ||||
7022 | expr_ty exc; | ||||
7023 | expr_ty cause; | ||||
7024 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7025 | if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7026 | return 1; |
7027 | } | ||||
7028 | if (tmp == NULL || tmp == Py_None) { | ||||
7029 | Py_CLEAR(tmp); | ||||
7030 | exc = NULL; | ||||
7031 | } | ||||
7032 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7033 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7034 | res = obj2ast_expr(state, tmp, &exc, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7035 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7036 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7037 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7038 | if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7039 | return 1; |
7040 | } | ||||
7041 | if (tmp == NULL || tmp == Py_None) { | ||||
7042 | Py_CLEAR(tmp); | ||||
7043 | cause = NULL; | ||||
7044 | } | ||||
7045 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7046 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7047 | res = obj2ast_expr(state, tmp, &cause, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7048 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7049 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7050 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7051 | *out = _PyAST_Raise(exc, cause, lineno, col_offset, end_lineno, |
7052 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7053 | if (*out == NULL) goto failed; |
7054 | return 0; | ||||
7055 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7056 | tp = state->Try_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7057 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7058 | if (isinstance == -1) { |
7059 | return 1; | ||||
7060 | } | ||||
7061 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7062 | asdl_stmt_seq* body; |
7063 | asdl_excepthandler_seq* handlers; | ||||
7064 | asdl_stmt_seq* orelse; | ||||
7065 | asdl_stmt_seq* finalbody; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7066 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7067 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7068 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7075 | int res; |
7076 | Py_ssize_t len; | ||||
7077 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7078 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7079 | PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7080 | goto failed; |
7081 | } | ||||
7082 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7083 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7084 | if (body == NULL) goto failed; |
7085 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7086 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7087 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7088 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7089 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7090 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7091 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7092 | if (len != PyList_GET_SIZE(tmp)) { |
7093 | PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration"); | ||||
7094 | goto failed; | ||||
7095 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7096 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7097 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7098 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7099 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7100 | if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7101 | return 1; |
7102 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7103 | if (tmp == NULL) { |
7104 | PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try"); | ||||
7105 | return 1; | ||||
7106 | } | ||||
7107 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7108 | int res; |
7109 | Py_ssize_t len; | ||||
7110 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7111 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7112 | PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7113 | goto failed; |
7114 | } | ||||
7115 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7116 | handlers = _Py_asdl_excepthandler_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7117 | if (handlers == NULL) goto failed; |
7118 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7119 | excepthandler_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7120 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7121 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7122 | res = obj2ast_excepthandler(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7123 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7124 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7125 | if (len != PyList_GET_SIZE(tmp)) { |
7126 | PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration"); | ||||
7127 | goto failed; | ||||
7128 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7129 | asdl_seq_SET(handlers, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7130 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7131 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7132 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7133 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7134 | return 1; |
7135 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7136 | if (tmp == NULL) { |
7137 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try"); | ||||
7138 | return 1; | ||||
7139 | } | ||||
7140 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7141 | int res; |
7142 | Py_ssize_t len; | ||||
7143 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7144 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7145 | PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7146 | goto failed; |
7147 | } | ||||
7148 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7149 | orelse = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7150 | if (orelse == NULL) goto failed; |
7151 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7152 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7153 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7154 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7155 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7156 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7157 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7158 | if (len != PyList_GET_SIZE(tmp)) { |
7159 | PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration"); | ||||
7160 | goto failed; | ||||
7161 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7162 | asdl_seq_SET(orelse, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7163 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7164 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7165 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7166 | if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7167 | return 1; |
7168 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7169 | if (tmp == NULL) { |
7170 | PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try"); | ||||
7171 | return 1; | ||||
7172 | } | ||||
7173 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7174 | int res; |
7175 | Py_ssize_t len; | ||||
7176 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7177 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7178 | PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7179 | goto failed; |
7180 | } | ||||
7181 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7182 | finalbody = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7183 | if (finalbody == NULL) goto failed; |
7184 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7185 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7186 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7187 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7188 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7189 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7190 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7191 | if (len != PyList_GET_SIZE(tmp)) { |
7192 | PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration"); | ||||
7193 | goto failed; | ||||
7194 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7195 | asdl_seq_SET(finalbody, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7196 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7197 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7198 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7199 | *out = _PyAST_Try(body, handlers, orelse, finalbody, lineno, |
7200 | col_offset, end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7201 | if (*out == NULL) goto failed; |
7202 | return 0; | ||||
7203 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7204 | tp = state->Assert_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7205 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7206 | if (isinstance == -1) { |
7207 | return 1; | ||||
7208 | } | ||||
7209 | if (isinstance) { | ||||
7210 | expr_ty test; | ||||
7211 | expr_ty msg; | ||||
7212 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7213 | if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7214 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7221 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7222 | res = obj2ast_expr(state, tmp, &test, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7223 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7224 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7225 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7226 | if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7227 | return 1; |
7228 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7229 | if (tmp == NULL || tmp == Py_None) { |
7230 | Py_CLEAR(tmp); | ||||
7231 | msg = NULL; | ||||
7232 | } | ||||
7233 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7234 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7235 | res = obj2ast_expr(state, tmp, &msg, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7236 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7237 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7238 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7239 | *out = _PyAST_Assert(test, msg, lineno, col_offset, end_lineno, |
7240 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7241 | if (*out == NULL) goto failed; |
7242 | return 0; | ||||
7243 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7244 | tp = state->Import_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7245 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7246 | if (isinstance == -1) { |
7247 | return 1; | ||||
7248 | } | ||||
7249 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7250 | asdl_alias_seq* names; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7251 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7252 | if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7253 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7260 | int res; |
7261 | Py_ssize_t len; | ||||
7262 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7263 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7264 | PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7265 | goto failed; |
7266 | } | ||||
7267 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7268 | names = _Py_asdl_alias_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7269 | if (names == NULL) goto failed; |
7270 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7271 | alias_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7272 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7273 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7274 | res = obj2ast_alias(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7275 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7276 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7277 | if (len != PyList_GET_SIZE(tmp)) { |
7278 | PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration"); | ||||
7279 | goto failed; | ||||
7280 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7281 | asdl_seq_SET(names, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7282 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7283 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7284 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7285 | *out = _PyAST_Import(names, lineno, col_offset, end_lineno, |
7286 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7287 | if (*out == NULL) goto failed; |
7288 | return 0; | ||||
7289 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7290 | tp = state->ImportFrom_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7291 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7292 | if (isinstance == -1) { |
7293 | return 1; | ||||
7294 | } | ||||
7295 | if (isinstance) { | ||||
7296 | identifier module; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7297 | asdl_alias_seq* names; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7298 | int level; |
7299 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7300 | if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7301 | return 1; |
7302 | } | ||||
7303 | if (tmp == NULL || tmp == Py_None) { | ||||
7304 | Py_CLEAR(tmp); | ||||
7305 | module = NULL; | ||||
7306 | } | ||||
7307 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7308 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7309 | res = obj2ast_identifier(state, tmp, &module, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7310 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7311 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7312 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7313 | if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7314 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7321 | int res; |
7322 | Py_ssize_t len; | ||||
7323 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7324 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7325 | PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7326 | goto failed; |
7327 | } | ||||
7328 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7329 | names = _Py_asdl_alias_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7330 | if (names == NULL) goto failed; |
7331 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7332 | alias_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7333 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7334 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7335 | res = obj2ast_alias(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7336 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7337 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7338 | if (len != PyList_GET_SIZE(tmp)) { |
7339 | PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration"); | ||||
7340 | goto failed; | ||||
7341 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7342 | asdl_seq_SET(names, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7343 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7344 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7345 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7346 | if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7347 | return 1; |
7348 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7349 | if (tmp == NULL || tmp == Py_None) { |
7350 | Py_CLEAR(tmp); | ||||
7351 | level = 0; | ||||
7352 | } | ||||
7353 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7354 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7355 | res = obj2ast_int(state, tmp, &level, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7356 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7357 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7358 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7359 | *out = _PyAST_ImportFrom(module, names, level, lineno, col_offset, |
7360 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7361 | if (*out == NULL) goto failed; |
7362 | return 0; | ||||
7363 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7364 | tp = state->Global_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7365 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7366 | if (isinstance == -1) { |
7367 | return 1; | ||||
7368 | } | ||||
7369 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7370 | asdl_identifier_seq* names; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7371 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7372 | if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7373 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7380 | int res; |
7381 | Py_ssize_t len; | ||||
7382 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7383 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7384 | PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7385 | goto failed; |
7386 | } | ||||
7387 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7388 | names = _Py_asdl_identifier_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7389 | if (names == NULL) goto failed; |
7390 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7391 | identifier val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7392 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7393 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7394 | res = obj2ast_identifier(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7395 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7396 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7397 | if (len != PyList_GET_SIZE(tmp)) { |
7398 | PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration"); | ||||
7399 | goto failed; | ||||
7400 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7401 | asdl_seq_SET(names, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7402 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7403 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7404 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7405 | *out = _PyAST_Global(names, lineno, col_offset, end_lineno, |
7406 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7407 | if (*out == NULL) goto failed; |
7408 | return 0; | ||||
7409 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7410 | tp = state->Nonlocal_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7411 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7412 | if (isinstance == -1) { |
7413 | return 1; | ||||
7414 | } | ||||
7415 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7416 | asdl_identifier_seq* names; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7417 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7418 | if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7419 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7426 | int res; |
7427 | Py_ssize_t len; | ||||
7428 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7429 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7430 | PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7431 | goto failed; |
7432 | } | ||||
7433 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7434 | names = _Py_asdl_identifier_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7435 | if (names == NULL) goto failed; |
7436 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7437 | identifier val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7438 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7439 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7440 | res = obj2ast_identifier(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7441 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7442 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7443 | if (len != PyList_GET_SIZE(tmp)) { |
7444 | PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration"); | ||||
7445 | goto failed; | ||||
7446 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7447 | asdl_seq_SET(names, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7448 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7449 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7450 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7451 | *out = _PyAST_Nonlocal(names, lineno, col_offset, end_lineno, |
7452 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7453 | if (*out == NULL) goto failed; |
7454 | return 0; | ||||
7455 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7456 | tp = state->Expr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7457 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7458 | if (isinstance == -1) { |
7459 | return 1; | ||||
7460 | } | ||||
7461 | if (isinstance) { | ||||
7462 | expr_ty value; | ||||
7463 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7464 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7465 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7472 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7473 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7474 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7475 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7476 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7477 | *out = _PyAST_Expr(value, lineno, col_offset, end_lineno, |
7478 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7479 | if (*out == NULL) goto failed; |
7480 | return 0; | ||||
7481 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7482 | tp = state->Pass_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7483 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7484 | if (isinstance == -1) { |
7485 | return 1; | ||||
7486 | } | ||||
7487 | if (isinstance) { | ||||
7488 | |||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7489 | *out = _PyAST_Pass(lineno, col_offset, end_lineno, end_col_offset, |
7490 | arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7491 | if (*out == NULL) goto failed; |
7492 | return 0; | ||||
7493 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7494 | tp = state->Break_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7495 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7496 | if (isinstance == -1) { |
7497 | return 1; | ||||
7498 | } | ||||
7499 | if (isinstance) { | ||||
7500 | |||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7501 | *out = _PyAST_Break(lineno, col_offset, end_lineno, end_col_offset, |
7502 | arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7503 | if (*out == NULL) goto failed; |
7504 | return 0; | ||||
7505 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7506 | tp = state->Continue_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7507 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7508 | if (isinstance == -1) { |
7509 | return 1; | ||||
7510 | } | ||||
7511 | if (isinstance) { | ||||
7512 | |||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7513 | *out = _PyAST_Continue(lineno, col_offset, end_lineno, end_col_offset, |
7514 | arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7515 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 7523 | } |
7524 | |||||
7525 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 7526 | obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena* |
7527 | arena) | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 7528 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7529 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 7530 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7531 | PyObject *tmp = NULL; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7532 | PyObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7533 | int lineno; |
7534 | int col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 7535 | int end_lineno; |
7536 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 7537 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7538 | if (obj == Py_None) { |
7539 | *out = NULL; | ||||
7540 | return 0; | ||||
7541 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7542 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7543 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7550 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7551 | res = obj2ast_int(state, tmp, &lineno, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7552 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7553 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7554 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7555 | if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 7556 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7557 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7558 | if (tmp == NULL) { |
7559 | PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr"); | ||||
7560 | return 1; | ||||
7561 | } | ||||
7562 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7563 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7564 | res = obj2ast_int(state, tmp, &col_offset, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7565 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7566 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7567 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7568 | if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 7569 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7577 | res = obj2ast_int(state, tmp, &end_lineno, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 7578 | if (res != 0) goto failed; |
7579 | Py_CLEAR(tmp); | ||||
7580 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7581 | if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 7582 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7590 | res = obj2ast_int(state, tmp, &end_col_offset, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 7591 | if (res != 0) goto failed; |
7592 | Py_CLEAR(tmp); | ||||
7593 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7594 | tp = state->BoolOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7595 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7596 | if (isinstance == -1) { |
7597 | return 1; | ||||
7598 | } | ||||
7599 | if (isinstance) { | ||||
7600 | boolop_ty op; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7601 | asdl_expr_seq* values; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7602 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7603 | if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7604 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7611 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7612 | res = obj2ast_boolop(state, tmp, &op, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7613 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7614 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7615 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7616 | if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7617 | return 1; |
7618 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7619 | if (tmp == NULL) { |
7620 | PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp"); | ||||
7621 | return 1; | ||||
7622 | } | ||||
7623 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7624 | int res; |
7625 | Py_ssize_t len; | ||||
7626 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7627 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7628 | PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7629 | goto failed; |
7630 | } | ||||
7631 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7632 | values = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7633 | if (values == NULL) goto failed; |
7634 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7635 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7636 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7637 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7638 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7639 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7640 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7641 | if (len != PyList_GET_SIZE(tmp)) { |
7642 | PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration"); | ||||
7643 | goto failed; | ||||
7644 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7645 | asdl_seq_SET(values, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7646 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7647 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7648 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7649 | *out = _PyAST_BoolOp(op, values, lineno, col_offset, end_lineno, |
7650 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7651 | if (*out == NULL) goto failed; |
7652 | return 0; | ||||
7653 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7654 | tp = state->NamedExpr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7655 | isinstance = PyObject_IsInstance(obj, tp); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7656 | if (isinstance == -1) { |
7657 | return 1; | ||||
7658 | } | ||||
7659 | if (isinstance) { | ||||
7660 | expr_ty target; | ||||
7661 | expr_ty value; | ||||
7662 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7663 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7664 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7672 | res = obj2ast_expr(state, tmp, &target, arena); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7673 | if (res != 0) goto failed; |
7674 | Py_CLEAR(tmp); | ||||
7675 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7676 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7677 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7685 | res = obj2ast_expr(state, tmp, &value, arena); |
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7686 | if (res != 0) goto failed; |
7687 | Py_CLEAR(tmp); | ||||
7688 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7689 | *out = _PyAST_NamedExpr(target, value, lineno, col_offset, end_lineno, |
7690 | end_col_offset, arena); | ||||
Emily Morehouse | 8f59ee0 | 2019-01-24 16:49:56 -0700 | [diff] [blame] | 7691 | if (*out == NULL) goto failed; |
7692 | return 0; | ||||
7693 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7694 | tp = state->BinOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7695 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7696 | if (isinstance == -1) { |
7697 | return 1; | ||||
7698 | } | ||||
7699 | if (isinstance) { | ||||
7700 | expr_ty left; | ||||
7701 | operator_ty op; | ||||
7702 | expr_ty right; | ||||
7703 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7704 | if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7705 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7712 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7713 | res = obj2ast_expr(state, tmp, &left, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7714 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7715 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7716 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7717 | if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7718 | return 1; |
7719 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7720 | if (tmp == NULL) { |
7721 | PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp"); | ||||
7722 | return 1; | ||||
7723 | } | ||||
7724 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7725 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7726 | res = obj2ast_operator(state, tmp, &op, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7727 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7728 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7729 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7730 | if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7731 | return 1; |
7732 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7733 | if (tmp == NULL) { |
7734 | PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp"); | ||||
7735 | return 1; | ||||
7736 | } | ||||
7737 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7738 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7739 | res = obj2ast_expr(state, tmp, &right, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7740 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7741 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7742 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7743 | *out = _PyAST_BinOp(left, op, right, lineno, col_offset, end_lineno, |
7744 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7745 | if (*out == NULL) goto failed; |
7746 | return 0; | ||||
7747 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7748 | tp = state->UnaryOp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7749 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7750 | if (isinstance == -1) { |
7751 | return 1; | ||||
7752 | } | ||||
7753 | if (isinstance) { | ||||
7754 | unaryop_ty op; | ||||
7755 | expr_ty operand; | ||||
7756 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7757 | if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7758 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7765 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7766 | res = obj2ast_unaryop(state, tmp, &op, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7767 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7768 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7769 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7770 | if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7771 | return 1; |
7772 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7773 | if (tmp == NULL) { |
7774 | PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp"); | ||||
7775 | return 1; | ||||
7776 | } | ||||
7777 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7778 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7779 | res = obj2ast_expr(state, tmp, &operand, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7780 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7781 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7782 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7783 | *out = _PyAST_UnaryOp(op, operand, lineno, col_offset, end_lineno, |
7784 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7785 | if (*out == NULL) goto failed; |
7786 | return 0; | ||||
7787 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7788 | tp = state->Lambda_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7789 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7790 | if (isinstance == -1) { |
7791 | return 1; | ||||
7792 | } | ||||
7793 | if (isinstance) { | ||||
7794 | arguments_ty args; | ||||
7795 | expr_ty body; | ||||
7796 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7797 | if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7798 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7805 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7806 | res = obj2ast_arguments(state, tmp, &args, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7807 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7808 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7809 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7810 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7811 | return 1; |
7812 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7813 | if (tmp == NULL) { |
7814 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda"); | ||||
7815 | return 1; | ||||
7816 | } | ||||
7817 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7818 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7819 | res = obj2ast_expr(state, tmp, &body, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7820 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7821 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7822 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7823 | *out = _PyAST_Lambda(args, body, lineno, col_offset, end_lineno, |
7824 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7825 | if (*out == NULL) goto failed; |
7826 | return 0; | ||||
7827 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7828 | tp = state->IfExp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7829 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7830 | if (isinstance == -1) { |
7831 | return 1; | ||||
7832 | } | ||||
7833 | if (isinstance) { | ||||
7834 | expr_ty test; | ||||
7835 | expr_ty body; | ||||
7836 | expr_ty orelse; | ||||
7837 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7838 | if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7839 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7846 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7847 | res = obj2ast_expr(state, tmp, &test, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7848 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7849 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7850 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7851 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7852 | return 1; |
7853 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7854 | if (tmp == NULL) { |
7855 | PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp"); | ||||
7856 | return 1; | ||||
7857 | } | ||||
7858 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7859 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7860 | res = obj2ast_expr(state, tmp, &body, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7861 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7862 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7863 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7864 | if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7865 | return 1; |
7866 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7867 | if (tmp == NULL) { |
7868 | PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp"); | ||||
7869 | return 1; | ||||
7870 | } | ||||
7871 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7872 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7873 | res = obj2ast_expr(state, tmp, &orelse, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7874 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7875 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7876 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7877 | *out = _PyAST_IfExp(test, body, orelse, lineno, col_offset, end_lineno, |
7878 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7879 | if (*out == NULL) goto failed; |
7880 | return 0; | ||||
7881 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7882 | tp = state->Dict_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7883 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7884 | if (isinstance == -1) { |
7885 | return 1; | ||||
7886 | } | ||||
7887 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7888 | asdl_expr_seq* keys; |
7889 | asdl_expr_seq* values; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7890 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7891 | if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7892 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7899 | int res; |
7900 | Py_ssize_t len; | ||||
7901 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7902 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7903 | PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7904 | goto failed; |
7905 | } | ||||
7906 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7907 | keys = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7908 | if (keys == NULL) goto failed; |
7909 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7910 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7911 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7912 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7913 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7914 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7915 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7916 | if (len != PyList_GET_SIZE(tmp)) { |
7917 | PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration"); | ||||
7918 | goto failed; | ||||
7919 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7920 | asdl_seq_SET(keys, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7921 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7922 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7923 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7924 | if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7925 | return 1; |
7926 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7927 | if (tmp == NULL) { |
7928 | PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict"); | ||||
7929 | return 1; | ||||
7930 | } | ||||
7931 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7932 | int res; |
7933 | Py_ssize_t len; | ||||
7934 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7935 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7936 | PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7937 | goto failed; |
7938 | } | ||||
7939 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7940 | values = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7941 | if (values == NULL) goto failed; |
7942 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7943 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7944 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7945 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7946 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7947 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7948 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7949 | if (len != PyList_GET_SIZE(tmp)) { |
7950 | PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration"); | ||||
7951 | goto failed; | ||||
7952 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7953 | asdl_seq_SET(values, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7954 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 7955 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7956 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 7957 | *out = _PyAST_Dict(keys, values, lineno, col_offset, end_lineno, |
7958 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7959 | if (*out == NULL) goto failed; |
7960 | return 0; | ||||
7961 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7962 | tp = state->Set_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7963 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7964 | if (isinstance == -1) { |
7965 | return 1; | ||||
7966 | } | ||||
7967 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7968 | asdl_expr_seq* elts; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7969 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7970 | if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 7971 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7978 | int res; |
7979 | Py_ssize_t len; | ||||
7980 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7981 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 7982 | PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7983 | goto failed; |
7984 | } | ||||
7985 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 7986 | elts = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7987 | if (elts == NULL) goto failed; |
7988 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7989 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7990 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
7991 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 7992 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 7993 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 7994 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 7995 | if (len != PyList_GET_SIZE(tmp)) { |
7996 | PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration"); | ||||
7997 | goto failed; | ||||
7998 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 7999 | asdl_seq_SET(elts, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8000 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8001 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8002 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8003 | *out = _PyAST_Set(elts, lineno, col_offset, end_lineno, end_col_offset, |
8004 | arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8005 | if (*out == NULL) goto failed; |
8006 | return 0; | ||||
8007 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8008 | tp = state->ListComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8009 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8010 | if (isinstance == -1) { |
8011 | return 1; | ||||
8012 | } | ||||
8013 | if (isinstance) { | ||||
8014 | expr_ty elt; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8015 | asdl_comprehension_seq* generators; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8016 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8017 | if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8018 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8025 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8026 | res = obj2ast_expr(state, tmp, &elt, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8027 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8028 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8029 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8030 | if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8031 | return 1; |
8032 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8033 | if (tmp == NULL) { |
8034 | PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp"); | ||||
8035 | return 1; | ||||
8036 | } | ||||
8037 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8038 | int res; |
8039 | Py_ssize_t len; | ||||
8040 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8041 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8042 | PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8043 | goto failed; |
8044 | } | ||||
8045 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8046 | generators = _Py_asdl_comprehension_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8047 | if (generators == NULL) goto failed; |
8048 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8049 | comprehension_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8050 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8051 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8052 | res = obj2ast_comprehension(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8053 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8054 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8055 | if (len != PyList_GET_SIZE(tmp)) { |
8056 | PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration"); | ||||
8057 | goto failed; | ||||
8058 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8059 | asdl_seq_SET(generators, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8060 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8061 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8062 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8063 | *out = _PyAST_ListComp(elt, generators, lineno, col_offset, end_lineno, |
8064 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8065 | if (*out == NULL) goto failed; |
8066 | return 0; | ||||
8067 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8068 | tp = state->SetComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8069 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8070 | if (isinstance == -1) { |
8071 | return 1; | ||||
8072 | } | ||||
8073 | if (isinstance) { | ||||
8074 | expr_ty elt; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8075 | asdl_comprehension_seq* generators; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8076 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8077 | if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8078 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8085 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8086 | res = obj2ast_expr(state, tmp, &elt, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8087 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8088 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8089 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8090 | if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8091 | return 1; |
8092 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8093 | if (tmp == NULL) { |
8094 | PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp"); | ||||
8095 | return 1; | ||||
8096 | } | ||||
8097 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8098 | int res; |
8099 | Py_ssize_t len; | ||||
8100 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8101 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8102 | PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8103 | goto failed; |
8104 | } | ||||
8105 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8106 | generators = _Py_asdl_comprehension_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8107 | if (generators == NULL) goto failed; |
8108 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8109 | comprehension_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8110 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8111 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8112 | res = obj2ast_comprehension(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8113 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8114 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8115 | if (len != PyList_GET_SIZE(tmp)) { |
8116 | PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration"); | ||||
8117 | goto failed; | ||||
8118 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8119 | asdl_seq_SET(generators, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8120 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8121 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8122 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8123 | *out = _PyAST_SetComp(elt, generators, lineno, col_offset, end_lineno, |
8124 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8125 | if (*out == NULL) goto failed; |
8126 | return 0; | ||||
8127 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8128 | tp = state->DictComp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8129 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8130 | if (isinstance == -1) { |
8131 | return 1; | ||||
8132 | } | ||||
8133 | if (isinstance) { | ||||
8134 | expr_ty key; | ||||
8135 | expr_ty value; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8136 | asdl_comprehension_seq* generators; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8137 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8138 | if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8139 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8146 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8147 | res = obj2ast_expr(state, tmp, &key, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8148 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8149 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8150 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8151 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8152 | return 1; |
8153 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8154 | if (tmp == NULL) { |
8155 | PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp"); | ||||
8156 | return 1; | ||||
8157 | } | ||||
8158 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8159 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8160 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8161 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8162 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8163 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8164 | if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8165 | return 1; |
8166 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8167 | if (tmp == NULL) { |
8168 | PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp"); | ||||
8169 | return 1; | ||||
8170 | } | ||||
8171 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8172 | int res; |
8173 | Py_ssize_t len; | ||||
8174 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8175 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8176 | PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8177 | goto failed; |
8178 | } | ||||
8179 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8180 | generators = _Py_asdl_comprehension_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8181 | if (generators == NULL) goto failed; |
8182 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8183 | comprehension_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8184 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8185 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8186 | res = obj2ast_comprehension(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8187 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8188 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8189 | if (len != PyList_GET_SIZE(tmp)) { |
8190 | PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration"); | ||||
8191 | goto failed; | ||||
8192 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8193 | asdl_seq_SET(generators, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8194 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8195 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8196 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8197 | *out = _PyAST_DictComp(key, value, generators, lineno, col_offset, |
8198 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8199 | if (*out == NULL) goto failed; |
8200 | return 0; | ||||
8201 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8202 | tp = state->GeneratorExp_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8203 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8204 | if (isinstance == -1) { |
8205 | return 1; | ||||
8206 | } | ||||
8207 | if (isinstance) { | ||||
8208 | expr_ty elt; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8209 | asdl_comprehension_seq* generators; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8210 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8211 | if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8212 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8219 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8220 | res = obj2ast_expr(state, tmp, &elt, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8221 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8222 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8223 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8224 | if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8225 | return 1; |
8226 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8227 | if (tmp == NULL) { |
8228 | PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp"); | ||||
8229 | return 1; | ||||
8230 | } | ||||
8231 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8232 | int res; |
8233 | Py_ssize_t len; | ||||
8234 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8235 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8236 | PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8237 | goto failed; |
8238 | } | ||||
8239 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8240 | generators = _Py_asdl_comprehension_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8241 | if (generators == NULL) goto failed; |
8242 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8243 | comprehension_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8244 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8245 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8246 | res = obj2ast_comprehension(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8247 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8248 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8249 | if (len != PyList_GET_SIZE(tmp)) { |
8250 | PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration"); | ||||
8251 | goto failed; | ||||
8252 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8253 | asdl_seq_SET(generators, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8254 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8255 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8256 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8257 | *out = _PyAST_GeneratorExp(elt, generators, lineno, col_offset, |
8258 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8259 | if (*out == NULL) goto failed; |
8260 | return 0; | ||||
8261 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8262 | tp = state->Await_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8263 | isinstance = PyObject_IsInstance(obj, tp); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 8264 | if (isinstance == -1) { |
8265 | return 1; | ||||
8266 | } | ||||
8267 | if (isinstance) { | ||||
8268 | expr_ty value; | ||||
8269 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8270 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8271 | 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 Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 8278 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8279 | res = obj2ast_expr(state, tmp, &value, arena); |
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 8280 | if (res != 0) goto failed; |
8281 | Py_CLEAR(tmp); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 8282 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8283 | *out = _PyAST_Await(value, lineno, col_offset, end_lineno, |
8284 | end_col_offset, arena); | ||||
Yury Selivanov | 7544508 | 2015-05-11 22:57:16 -0400 | [diff] [blame] | 8285 | if (*out == NULL) goto failed; |
8286 | return 0; | ||||
8287 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8288 | tp = state->Yield_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8289 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8290 | if (isinstance == -1) { |
8291 | return 1; | ||||
8292 | } | ||||
8293 | if (isinstance) { | ||||
8294 | expr_ty value; | ||||
8295 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8296 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8297 | return 1; |
8298 | } | ||||
8299 | if (tmp == NULL || tmp == Py_None) { | ||||
8300 | Py_CLEAR(tmp); | ||||
8301 | value = NULL; | ||||
8302 | } | ||||
8303 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8304 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8305 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8306 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8307 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8308 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8309 | *out = _PyAST_Yield(value, lineno, col_offset, end_lineno, |
8310 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8311 | if (*out == NULL) goto failed; |
8312 | return 0; | ||||
8313 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8314 | tp = state->YieldFrom_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8315 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8316 | if (isinstance == -1) { |
8317 | return 1; | ||||
8318 | } | ||||
8319 | if (isinstance) { | ||||
8320 | expr_ty value; | ||||
8321 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8322 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8323 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8330 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8331 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8332 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8333 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8334 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8335 | *out = _PyAST_YieldFrom(value, lineno, col_offset, end_lineno, |
8336 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8337 | if (*out == NULL) goto failed; |
8338 | return 0; | ||||
8339 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8340 | tp = state->Compare_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8341 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8342 | if (isinstance == -1) { |
8343 | return 1; | ||||
8344 | } | ||||
8345 | if (isinstance) { | ||||
8346 | expr_ty left; | ||||
8347 | asdl_int_seq* ops; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8348 | asdl_expr_seq* comparators; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8349 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8350 | if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8351 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8358 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8359 | res = obj2ast_expr(state, tmp, &left, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8360 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8361 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8362 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8363 | if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8364 | return 1; |
8365 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8366 | if (tmp == NULL) { |
8367 | PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare"); | ||||
8368 | return 1; | ||||
8369 | } | ||||
8370 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8371 | int res; |
8372 | Py_ssize_t len; | ||||
8373 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8374 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8375 | PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8376 | goto failed; |
8377 | } | ||||
8378 | len = PyList_GET_SIZE(tmp); | ||||
Antoine Pitrou | d01d396e | 2013-10-12 22:52:43 +0200 | [diff] [blame] | 8379 | ops = _Py_asdl_int_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8380 | if (ops == NULL) goto failed; |
8381 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8382 | cmpop_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8383 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8384 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8385 | res = obj2ast_cmpop(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8386 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8387 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8388 | if (len != PyList_GET_SIZE(tmp)) { |
8389 | PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration"); | ||||
8390 | goto failed; | ||||
8391 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8392 | asdl_seq_SET(ops, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8393 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8394 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8395 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8396 | if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8397 | return 1; |
8398 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8399 | if (tmp == NULL) { |
8400 | PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare"); | ||||
8401 | return 1; | ||||
8402 | } | ||||
8403 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8404 | int res; |
8405 | Py_ssize_t len; | ||||
8406 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8407 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8408 | PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8409 | goto failed; |
8410 | } | ||||
8411 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8412 | comparators = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8413 | if (comparators == NULL) goto failed; |
8414 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8415 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8416 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8417 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8418 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8419 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8420 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8421 | if (len != PyList_GET_SIZE(tmp)) { |
8422 | PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration"); | ||||
8423 | goto failed; | ||||
8424 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8425 | asdl_seq_SET(comparators, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8426 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8427 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8428 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8429 | *out = _PyAST_Compare(left, ops, comparators, lineno, col_offset, |
8430 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8431 | if (*out == NULL) goto failed; |
8432 | return 0; | ||||
8433 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8434 | tp = state->Call_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8435 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8436 | if (isinstance == -1) { |
8437 | return 1; | ||||
8438 | } | ||||
8439 | if (isinstance) { | ||||
8440 | expr_ty func; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8441 | asdl_expr_seq* args; |
8442 | asdl_keyword_seq* keywords; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8443 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8444 | if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8445 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8452 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8453 | res = obj2ast_expr(state, tmp, &func, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8454 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8455 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8456 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8457 | if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8458 | return 1; |
8459 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8460 | if (tmp == NULL) { |
8461 | PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call"); | ||||
8462 | return 1; | ||||
8463 | } | ||||
8464 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8465 | int res; |
8466 | Py_ssize_t len; | ||||
8467 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8468 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8469 | PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8470 | goto failed; |
8471 | } | ||||
8472 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8473 | args = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8474 | if (args == NULL) goto failed; |
8475 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8476 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8477 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8478 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8479 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8480 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8481 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8482 | if (len != PyList_GET_SIZE(tmp)) { |
8483 | PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration"); | ||||
8484 | goto failed; | ||||
8485 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8486 | asdl_seq_SET(args, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8487 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8488 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8489 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8490 | if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8491 | return 1; |
8492 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8493 | if (tmp == NULL) { |
8494 | PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call"); | ||||
8495 | return 1; | ||||
8496 | } | ||||
8497 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8498 | int res; |
8499 | Py_ssize_t len; | ||||
8500 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8501 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8502 | PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8503 | goto failed; |
8504 | } | ||||
8505 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8506 | keywords = _Py_asdl_keyword_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8507 | if (keywords == NULL) goto failed; |
8508 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8509 | keyword_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8510 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8511 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8512 | res = obj2ast_keyword(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8513 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8514 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8515 | if (len != PyList_GET_SIZE(tmp)) { |
8516 | PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration"); | ||||
8517 | goto failed; | ||||
8518 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8519 | asdl_seq_SET(keywords, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8520 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8521 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8522 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8523 | *out = _PyAST_Call(func, args, keywords, lineno, col_offset, |
8524 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8525 | if (*out == NULL) goto failed; |
8526 | return 0; | ||||
8527 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8528 | tp = state->FormattedValue_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8529 | isinstance = PyObject_IsInstance(obj, tp); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8530 | if (isinstance == -1) { |
8531 | return 1; | ||||
8532 | } | ||||
8533 | if (isinstance) { | ||||
8534 | expr_ty value; | ||||
8535 | int conversion; | ||||
8536 | expr_ty format_spec; | ||||
8537 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8538 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8539 | 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. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8546 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8547 | res = obj2ast_expr(state, tmp, &value, arena); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8548 | if (res != 0) goto failed; |
8549 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8550 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8551 | if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) { |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8552 | return 1; |
8553 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8554 | if (tmp == NULL || tmp == Py_None) { |
8555 | Py_CLEAR(tmp); | ||||
8556 | conversion = 0; | ||||
8557 | } | ||||
8558 | else { | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8559 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8560 | res = obj2ast_int(state, tmp, &conversion, arena); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8561 | if (res != 0) goto failed; |
8562 | Py_CLEAR(tmp); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8563 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8564 | if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8565 | return 1; |
8566 | } | ||||
8567 | if (tmp == NULL || tmp == Py_None) { | ||||
8568 | Py_CLEAR(tmp); | ||||
8569 | format_spec = NULL; | ||||
8570 | } | ||||
8571 | else { | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8572 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8573 | res = obj2ast_expr(state, tmp, &format_spec, arena); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8574 | if (res != 0) goto failed; |
8575 | Py_CLEAR(tmp); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8576 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8577 | *out = _PyAST_FormattedValue(value, conversion, format_spec, lineno, |
8578 | col_offset, end_lineno, end_col_offset, | ||||
8579 | arena); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8580 | if (*out == NULL) goto failed; |
8581 | return 0; | ||||
8582 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8583 | tp = state->JoinedStr_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8584 | isinstance = PyObject_IsInstance(obj, tp); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8585 | if (isinstance == -1) { |
8586 | return 1; | ||||
8587 | } | ||||
8588 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8589 | asdl_expr_seq* values; |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8590 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8591 | if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8592 | 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. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8599 | int res; |
8600 | Py_ssize_t len; | ||||
8601 | Py_ssize_t i; | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8602 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8603 | PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8604 | goto failed; |
8605 | } | ||||
8606 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8607 | values = _Py_asdl_expr_seq_new(len, arena); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8608 | if (values == NULL) goto failed; |
8609 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8610 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8611 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8612 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8613 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8614 | Py_DECREF(tmp2); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8615 | if (res != 0) goto failed; |
Serhiy Storchaka | 5e80855 | 2016-10-07 21:55:49 +0300 | [diff] [blame] | 8616 | if (len != PyList_GET_SIZE(tmp)) { |
8617 | PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration"); | ||||
8618 | goto failed; | ||||
8619 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8620 | asdl_seq_SET(values, i, val); |
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8621 | } |
8622 | Py_CLEAR(tmp); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8623 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8624 | *out = _PyAST_JoinedStr(values, lineno, col_offset, end_lineno, |
8625 | end_col_offset, arena); | ||||
Eric V. Smith | 235a6f0 | 2015-09-19 14:51:32 -0400 | [diff] [blame] | 8626 | if (*out == NULL) goto failed; |
8627 | return 0; | ||||
8628 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8629 | tp = state->Constant_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8630 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8631 | if (isinstance == -1) { |
8632 | return 1; | ||||
8633 | } | ||||
8634 | if (isinstance) { | ||||
8635 | constant value; | ||||
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 8636 | string kind; |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8637 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8638 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8639 | 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 Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8646 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8647 | res = obj2ast_constant(state, tmp, &value, arena); |
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8648 | if (res != 0) goto failed; |
8649 | Py_CLEAR(tmp); | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8650 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8651 | if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) { |
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 8652 | return 1; |
8653 | } | ||||
8654 | if (tmp == NULL || tmp == Py_None) { | ||||
8655 | Py_CLEAR(tmp); | ||||
8656 | kind = NULL; | ||||
8657 | } | ||||
8658 | else { | ||||
8659 | int res; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8660 | res = obj2ast_string(state, tmp, &kind, arena); |
Guido van Rossum | 10f8ce6 | 2019-03-13 13:00:46 -0700 | [diff] [blame] | 8661 | if (res != 0) goto failed; |
8662 | Py_CLEAR(tmp); | ||||
8663 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8664 | *out = _PyAST_Constant(value, kind, lineno, col_offset, end_lineno, |
8665 | end_col_offset, arena); | ||||
Victor Stinner | f2c1aa1 | 2016-01-26 00:40:57 +0100 | [diff] [blame] | 8666 | if (*out == NULL) goto failed; |
8667 | return 0; | ||||
8668 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8669 | tp = state->Attribute_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8670 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8671 | if (isinstance == -1) { |
8672 | return 1; | ||||
8673 | } | ||||
8674 | if (isinstance) { | ||||
8675 | expr_ty value; | ||||
8676 | identifier attr; | ||||
8677 | expr_context_ty ctx; | ||||
8678 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8679 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8680 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8687 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8688 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8689 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8690 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8691 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8692 | if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8693 | return 1; |
8694 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8695 | if (tmp == NULL) { |
8696 | PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute"); | ||||
8697 | return 1; | ||||
8698 | } | ||||
8699 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8700 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8701 | res = obj2ast_identifier(state, tmp, &attr, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8702 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8703 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8704 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8705 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8706 | return 1; |
8707 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8708 | if (tmp == NULL) { |
8709 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute"); | ||||
8710 | return 1; | ||||
8711 | } | ||||
8712 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8713 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8714 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8715 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8716 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8717 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8718 | *out = _PyAST_Attribute(value, attr, ctx, lineno, col_offset, |
8719 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8720 | if (*out == NULL) goto failed; |
8721 | return 0; | ||||
8722 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8723 | tp = state->Subscript_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8724 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8725 | if (isinstance == -1) { |
8726 | return 1; | ||||
8727 | } | ||||
8728 | if (isinstance) { | ||||
8729 | expr_ty value; | ||||
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 8730 | expr_ty slice; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8731 | expr_context_ty ctx; |
8732 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8733 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8734 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8741 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8742 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8743 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8744 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8745 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8746 | if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8747 | return 1; |
8748 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8749 | if (tmp == NULL) { |
8750 | PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript"); | ||||
8751 | return 1; | ||||
8752 | } | ||||
8753 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8754 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8755 | res = obj2ast_expr(state, tmp, &slice, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8756 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8757 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8758 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8759 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8760 | return 1; |
8761 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8762 | if (tmp == NULL) { |
8763 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript"); | ||||
8764 | return 1; | ||||
8765 | } | ||||
8766 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8767 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8768 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8769 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8770 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8771 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8772 | *out = _PyAST_Subscript(value, slice, ctx, lineno, col_offset, |
8773 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8774 | if (*out == NULL) goto failed; |
8775 | return 0; | ||||
8776 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8777 | tp = state->Starred_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8778 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8779 | if (isinstance == -1) { |
8780 | return 1; | ||||
8781 | } | ||||
8782 | if (isinstance) { | ||||
8783 | expr_ty value; | ||||
8784 | expr_context_ty ctx; | ||||
8785 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8786 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8787 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8794 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8795 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8796 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8797 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8798 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8799 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8800 | return 1; |
8801 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8802 | if (tmp == NULL) { |
8803 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred"); | ||||
8804 | return 1; | ||||
8805 | } | ||||
8806 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8807 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8808 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8809 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8810 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8811 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8812 | *out = _PyAST_Starred(value, ctx, lineno, col_offset, end_lineno, |
8813 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8814 | if (*out == NULL) goto failed; |
8815 | return 0; | ||||
8816 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8817 | tp = state->Name_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8818 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8819 | if (isinstance == -1) { |
8820 | return 1; | ||||
8821 | } | ||||
8822 | if (isinstance) { | ||||
8823 | identifier id; | ||||
8824 | expr_context_ty ctx; | ||||
8825 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8826 | if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8827 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8834 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8835 | res = obj2ast_identifier(state, tmp, &id, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8836 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8837 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8838 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8839 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8840 | return 1; |
8841 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8842 | if (tmp == NULL) { |
8843 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name"); | ||||
8844 | return 1; | ||||
8845 | } | ||||
8846 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8847 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8848 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8849 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8850 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8851 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8852 | *out = _PyAST_Name(id, ctx, lineno, col_offset, end_lineno, |
8853 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8854 | if (*out == NULL) goto failed; |
8855 | return 0; | ||||
8856 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8857 | tp = state->List_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8858 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8859 | if (isinstance == -1) { |
8860 | return 1; | ||||
8861 | } | ||||
8862 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8863 | asdl_expr_seq* elts; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8864 | expr_context_ty ctx; |
8865 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8866 | if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8867 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8874 | int res; |
8875 | Py_ssize_t len; | ||||
8876 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8877 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8878 | PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8879 | goto failed; |
8880 | } | ||||
8881 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8882 | elts = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8883 | if (elts == NULL) goto failed; |
8884 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8885 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8886 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8887 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8888 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8889 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8890 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8891 | if (len != PyList_GET_SIZE(tmp)) { |
8892 | PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration"); | ||||
8893 | goto failed; | ||||
8894 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8895 | asdl_seq_SET(elts, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8896 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8897 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8898 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8899 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8900 | return 1; |
8901 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8902 | if (tmp == NULL) { |
8903 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List"); | ||||
8904 | return 1; | ||||
8905 | } | ||||
8906 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8907 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8908 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8909 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8910 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8911 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8912 | *out = _PyAST_List(elts, ctx, lineno, col_offset, end_lineno, |
8913 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8914 | if (*out == NULL) goto failed; |
8915 | return 0; | ||||
8916 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8917 | tp = state->Tuple_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8918 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8919 | if (isinstance == -1) { |
8920 | return 1; | ||||
8921 | } | ||||
8922 | if (isinstance) { | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8923 | asdl_expr_seq* elts; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8924 | expr_context_ty ctx; |
8925 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8926 | if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8927 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8934 | int res; |
8935 | Py_ssize_t len; | ||||
8936 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8937 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 8938 | PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8939 | goto failed; |
8940 | } | ||||
8941 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 8942 | elts = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8943 | if (elts == NULL) goto failed; |
8944 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8945 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8946 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
8947 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8948 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 8949 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8950 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 8951 | if (len != PyList_GET_SIZE(tmp)) { |
8952 | PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration"); | ||||
8953 | goto failed; | ||||
8954 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 8955 | asdl_seq_SET(elts, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8956 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8957 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8958 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8959 | if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8960 | return 1; |
8961 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 8962 | if (tmp == NULL) { |
8963 | PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple"); | ||||
8964 | return 1; | ||||
8965 | } | ||||
8966 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8967 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8968 | res = obj2ast_expr_context(state, tmp, &ctx, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8969 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 8970 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8971 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 8972 | *out = _PyAST_Tuple(elts, ctx, lineno, col_offset, end_lineno, |
8973 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 8974 | if (*out == NULL) goto failed; |
8975 | return 0; | ||||
8976 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8977 | tp = state->Slice_type; |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 8978 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8987 | if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) { |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 8988 | return 1; |
8989 | } | ||||
8990 | if (tmp == NULL || tmp == Py_None) { | ||||
8991 | Py_CLEAR(tmp); | ||||
8992 | lower = NULL; | ||||
8993 | } | ||||
8994 | else { | ||||
8995 | int res; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 8996 | res = obj2ast_expr(state, tmp, &lower, arena); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 8997 | if (res != 0) goto failed; |
8998 | Py_CLEAR(tmp); | ||||
8999 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9000 | if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) { |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 9001 | return 1; |
9002 | } | ||||
9003 | if (tmp == NULL || tmp == Py_None) { | ||||
9004 | Py_CLEAR(tmp); | ||||
9005 | upper = NULL; | ||||
9006 | } | ||||
9007 | else { | ||||
9008 | int res; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9009 | res = obj2ast_expr(state, tmp, &upper, arena); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 9010 | if (res != 0) goto failed; |
9011 | Py_CLEAR(tmp); | ||||
9012 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9013 | if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) { |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 9014 | return 1; |
9015 | } | ||||
9016 | if (tmp == NULL || tmp == Py_None) { | ||||
9017 | Py_CLEAR(tmp); | ||||
9018 | step = NULL; | ||||
9019 | } | ||||
9020 | else { | ||||
9021 | int res; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9022 | res = obj2ast_expr(state, tmp, &step, arena); |
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 9023 | if (res != 0) goto failed; |
9024 | Py_CLEAR(tmp); | ||||
9025 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 9026 | *out = _PyAST_Slice(lower, upper, step, lineno, col_offset, end_lineno, |
9027 | end_col_offset, arena); | ||||
Serhiy Storchaka | 13d52c2 | 2020-03-10 18:52:34 +0200 | [diff] [blame] | 9028 | if (*out == NULL) goto failed; |
9029 | return 0; | ||||
9030 | } | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9031 | |
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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9036 | } |
9037 | |||||
9038 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9039 | obj2ast_expr_context(struct ast_state *state, PyObject* obj, expr_context_ty* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9040 | out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9041 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9042 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9043 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9044 | isinstance = PyObject_IsInstance(obj, state->Load_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9045 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9046 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9047 | } |
9048 | if (isinstance) { | ||||
9049 | *out = Load; | ||||
9050 | return 0; | ||||
9051 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9052 | isinstance = PyObject_IsInstance(obj, state->Store_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9053 | if (isinstance == -1) { |
9054 | return 1; | ||||
9055 | } | ||||
9056 | if (isinstance) { | ||||
9057 | *out = Store; | ||||
9058 | return 0; | ||||
9059 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9060 | isinstance = PyObject_IsInstance(obj, state->Del_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9061 | if (isinstance == -1) { |
9062 | return 1; | ||||
9063 | } | ||||
9064 | if (isinstance) { | ||||
9065 | *out = Del; | ||||
9066 | return 0; | ||||
9067 | } | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9068 | |
9069 | PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj); | ||||
9070 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9071 | } |
9072 | |||||
9073 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9074 | obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* out, PyArena* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9075 | arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9076 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9077 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9078 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9079 | isinstance = PyObject_IsInstance(obj, state->And_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9080 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9081 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9082 | } |
9083 | if (isinstance) { | ||||
9084 | *out = And; | ||||
9085 | return 0; | ||||
9086 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9087 | isinstance = PyObject_IsInstance(obj, state->Or_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9088 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9098 | } |
9099 | |||||
9100 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9101 | obj2ast_operator(struct ast_state *state, PyObject* obj, operator_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9102 | PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9103 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9104 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9105 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9106 | isinstance = PyObject_IsInstance(obj, state->Add_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9107 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9108 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9109 | } |
9110 | if (isinstance) { | ||||
9111 | *out = Add; | ||||
9112 | return 0; | ||||
9113 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9114 | isinstance = PyObject_IsInstance(obj, state->Sub_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9115 | if (isinstance == -1) { |
9116 | return 1; | ||||
9117 | } | ||||
9118 | if (isinstance) { | ||||
9119 | *out = Sub; | ||||
9120 | return 0; | ||||
9121 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9122 | isinstance = PyObject_IsInstance(obj, state->Mult_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9123 | if (isinstance == -1) { |
9124 | return 1; | ||||
9125 | } | ||||
9126 | if (isinstance) { | ||||
9127 | *out = Mult; | ||||
9128 | return 0; | ||||
9129 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9130 | isinstance = PyObject_IsInstance(obj, state->MatMult_type); |
Benjamin Peterson | d51374e | 2014-04-09 23:55:56 -0400 | [diff] [blame] | 9131 | if (isinstance == -1) { |
9132 | return 1; | ||||
9133 | } | ||||
9134 | if (isinstance) { | ||||
9135 | *out = MatMult; | ||||
9136 | return 0; | ||||
9137 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9138 | isinstance = PyObject_IsInstance(obj, state->Div_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9139 | if (isinstance == -1) { |
9140 | return 1; | ||||
9141 | } | ||||
9142 | if (isinstance) { | ||||
9143 | *out = Div; | ||||
9144 | return 0; | ||||
9145 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9146 | isinstance = PyObject_IsInstance(obj, state->Mod_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9147 | if (isinstance == -1) { |
9148 | return 1; | ||||
9149 | } | ||||
9150 | if (isinstance) { | ||||
9151 | *out = Mod; | ||||
9152 | return 0; | ||||
9153 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9154 | isinstance = PyObject_IsInstance(obj, state->Pow_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9155 | if (isinstance == -1) { |
9156 | return 1; | ||||
9157 | } | ||||
9158 | if (isinstance) { | ||||
9159 | *out = Pow; | ||||
9160 | return 0; | ||||
9161 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9162 | isinstance = PyObject_IsInstance(obj, state->LShift_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9163 | if (isinstance == -1) { |
9164 | return 1; | ||||
9165 | } | ||||
9166 | if (isinstance) { | ||||
9167 | *out = LShift; | ||||
9168 | return 0; | ||||
9169 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9170 | isinstance = PyObject_IsInstance(obj, state->RShift_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9171 | if (isinstance == -1) { |
9172 | return 1; | ||||
9173 | } | ||||
9174 | if (isinstance) { | ||||
9175 | *out = RShift; | ||||
9176 | return 0; | ||||
9177 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9178 | isinstance = PyObject_IsInstance(obj, state->BitOr_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9179 | if (isinstance == -1) { |
9180 | return 1; | ||||
9181 | } | ||||
9182 | if (isinstance) { | ||||
9183 | *out = BitOr; | ||||
9184 | return 0; | ||||
9185 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9186 | isinstance = PyObject_IsInstance(obj, state->BitXor_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9187 | if (isinstance == -1) { |
9188 | return 1; | ||||
9189 | } | ||||
9190 | if (isinstance) { | ||||
9191 | *out = BitXor; | ||||
9192 | return 0; | ||||
9193 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9194 | isinstance = PyObject_IsInstance(obj, state->BitAnd_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9195 | if (isinstance == -1) { |
9196 | return 1; | ||||
9197 | } | ||||
9198 | if (isinstance) { | ||||
9199 | *out = BitAnd; | ||||
9200 | return 0; | ||||
9201 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9202 | isinstance = PyObject_IsInstance(obj, state->FloorDiv_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9203 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9213 | } |
9214 | |||||
9215 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9216 | obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* out, |
9217 | PyArena* arena) | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9218 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9219 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9220 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9221 | isinstance = PyObject_IsInstance(obj, state->Invert_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9222 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9223 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9224 | } |
9225 | if (isinstance) { | ||||
9226 | *out = Invert; | ||||
9227 | return 0; | ||||
9228 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9229 | isinstance = PyObject_IsInstance(obj, state->Not_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9230 | if (isinstance == -1) { |
9231 | return 1; | ||||
9232 | } | ||||
9233 | if (isinstance) { | ||||
9234 | *out = Not; | ||||
9235 | return 0; | ||||
9236 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9237 | isinstance = PyObject_IsInstance(obj, state->UAdd_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9238 | if (isinstance == -1) { |
9239 | return 1; | ||||
9240 | } | ||||
9241 | if (isinstance) { | ||||
9242 | *out = UAdd; | ||||
9243 | return 0; | ||||
9244 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9245 | isinstance = PyObject_IsInstance(obj, state->USub_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9246 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9256 | } |
9257 | |||||
9258 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9259 | obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, PyArena* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9260 | arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9261 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9262 | int isinstance; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9263 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9264 | isinstance = PyObject_IsInstance(obj, state->Eq_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9265 | if (isinstance == -1) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9266 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9267 | } |
9268 | if (isinstance) { | ||||
9269 | *out = Eq; | ||||
9270 | return 0; | ||||
9271 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9272 | isinstance = PyObject_IsInstance(obj, state->NotEq_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9273 | if (isinstance == -1) { |
9274 | return 1; | ||||
9275 | } | ||||
9276 | if (isinstance) { | ||||
9277 | *out = NotEq; | ||||
9278 | return 0; | ||||
9279 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9280 | isinstance = PyObject_IsInstance(obj, state->Lt_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9281 | if (isinstance == -1) { |
9282 | return 1; | ||||
9283 | } | ||||
9284 | if (isinstance) { | ||||
9285 | *out = Lt; | ||||
9286 | return 0; | ||||
9287 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9288 | isinstance = PyObject_IsInstance(obj, state->LtE_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9289 | if (isinstance == -1) { |
9290 | return 1; | ||||
9291 | } | ||||
9292 | if (isinstance) { | ||||
9293 | *out = LtE; | ||||
9294 | return 0; | ||||
9295 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9296 | isinstance = PyObject_IsInstance(obj, state->Gt_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9297 | if (isinstance == -1) { |
9298 | return 1; | ||||
9299 | } | ||||
9300 | if (isinstance) { | ||||
9301 | *out = Gt; | ||||
9302 | return 0; | ||||
9303 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9304 | isinstance = PyObject_IsInstance(obj, state->GtE_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9305 | if (isinstance == -1) { |
9306 | return 1; | ||||
9307 | } | ||||
9308 | if (isinstance) { | ||||
9309 | *out = GtE; | ||||
9310 | return 0; | ||||
9311 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9312 | isinstance = PyObject_IsInstance(obj, state->Is_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9313 | if (isinstance == -1) { |
9314 | return 1; | ||||
9315 | } | ||||
9316 | if (isinstance) { | ||||
9317 | *out = Is; | ||||
9318 | return 0; | ||||
9319 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9320 | isinstance = PyObject_IsInstance(obj, state->IsNot_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9321 | if (isinstance == -1) { |
9322 | return 1; | ||||
9323 | } | ||||
9324 | if (isinstance) { | ||||
9325 | *out = IsNot; | ||||
9326 | return 0; | ||||
9327 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9328 | isinstance = PyObject_IsInstance(obj, state->In_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9329 | if (isinstance == -1) { |
9330 | return 1; | ||||
9331 | } | ||||
9332 | if (isinstance) { | ||||
9333 | *out = In; | ||||
9334 | return 0; | ||||
9335 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9336 | isinstance = PyObject_IsInstance(obj, state->NotIn_type); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9337 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9347 | } |
9348 | |||||
9349 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9350 | obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9351 | out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9352 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9353 | PyObject* tmp = NULL; |
9354 | expr_ty target; | ||||
9355 | expr_ty iter; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9356 | asdl_expr_seq* ifs; |
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 9357 | int is_async; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9358 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9359 | if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9360 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9367 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9368 | res = obj2ast_expr(state, tmp, &target, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9369 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9370 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9371 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9372 | if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9373 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9374 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9375 | if (tmp == NULL) { |
9376 | PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension"); | ||||
9377 | return 1; | ||||
9378 | } | ||||
9379 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9380 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9381 | res = obj2ast_expr(state, tmp, &iter, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9382 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9383 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9384 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9385 | if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9386 | return 1; |
9387 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9388 | if (tmp == NULL) { |
9389 | PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension"); | ||||
9390 | return 1; | ||||
9391 | } | ||||
9392 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9393 | int res; |
9394 | Py_ssize_t len; | ||||
9395 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9396 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9397 | PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9398 | goto failed; |
9399 | } | ||||
9400 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9401 | ifs = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9402 | if (ifs == NULL) goto failed; |
9403 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9404 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9405 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9406 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9407 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9408 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9409 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 9410 | if (len != PyList_GET_SIZE(tmp)) { |
9411 | PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration"); | ||||
9412 | goto failed; | ||||
9413 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9414 | asdl_seq_SET(ifs, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9415 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9416 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9417 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9418 | if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9419 | return 1; |
9420 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9421 | if (tmp == NULL) { |
9422 | PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension"); | ||||
9423 | return 1; | ||||
9424 | } | ||||
9425 | else { | ||||
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 9426 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9427 | res = obj2ast_int(state, tmp, &is_async, arena); |
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 9428 | if (res != 0) goto failed; |
9429 | Py_CLEAR(tmp); | ||||
Yury Selivanov | 52c4e7c | 2016-09-09 10:36:01 -0700 | [diff] [blame] | 9430 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 9431 | *out = _PyAST_comprehension(target, iter, ifs, is_async, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9432 | return 0; |
9433 | failed: | ||||
9434 | Py_XDECREF(tmp); | ||||
9435 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9436 | } |
9437 | |||||
9438 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9439 | obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9440 | out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9441 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9442 | int isinstance; |
Neal Norwitz | ad74aa8 | 2008-03-31 05:14:30 +0000 | [diff] [blame] | 9443 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9444 | PyObject *tmp = NULL; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9445 | PyObject *tp; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9446 | int lineno; |
9447 | int col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9448 | int end_lineno; |
9449 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9450 | |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9451 | if (obj == Py_None) { |
9452 | *out = NULL; | ||||
9453 | return 0; | ||||
9454 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9455 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9456 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9463 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9464 | res = obj2ast_int(state, tmp, &lineno, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9465 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9466 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9467 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9468 | if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9469 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9470 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9471 | if (tmp == NULL) { |
9472 | PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler"); | ||||
9473 | return 1; | ||||
9474 | } | ||||
9475 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9476 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9477 | res = obj2ast_int(state, tmp, &col_offset, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9478 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9479 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9480 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9481 | if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9482 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9490 | res = obj2ast_int(state, tmp, &end_lineno, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9491 | if (res != 0) goto failed; |
9492 | Py_CLEAR(tmp); | ||||
9493 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9494 | if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9495 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9503 | res = obj2ast_int(state, tmp, &end_col_offset, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9504 | if (res != 0) goto failed; |
9505 | Py_CLEAR(tmp); | ||||
9506 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9507 | tp = state->ExceptHandler_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9508 | isinstance = PyObject_IsInstance(obj, tp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9509 | if (isinstance == -1) { |
9510 | return 1; | ||||
9511 | } | ||||
9512 | if (isinstance) { | ||||
9513 | expr_ty type; | ||||
9514 | identifier name; | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9515 | asdl_stmt_seq* body; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9516 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9517 | if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9518 | return 1; |
9519 | } | ||||
9520 | if (tmp == NULL || tmp == Py_None) { | ||||
9521 | Py_CLEAR(tmp); | ||||
9522 | type = NULL; | ||||
9523 | } | ||||
9524 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9525 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9526 | res = obj2ast_expr(state, tmp, &type, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9527 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9528 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9529 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9530 | if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9531 | return 1; |
9532 | } | ||||
9533 | if (tmp == NULL || tmp == Py_None) { | ||||
9534 | Py_CLEAR(tmp); | ||||
9535 | name = NULL; | ||||
9536 | } | ||||
9537 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9538 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9539 | res = obj2ast_identifier(state, tmp, &name, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9540 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9541 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9542 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9543 | if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9544 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9551 | int res; |
9552 | Py_ssize_t len; | ||||
9553 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9554 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9555 | PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9556 | goto failed; |
9557 | } | ||||
9558 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9559 | body = _Py_asdl_stmt_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9560 | if (body == NULL) goto failed; |
9561 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9562 | stmt_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9563 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9564 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9565 | res = obj2ast_stmt(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9566 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9567 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 9568 | if (len != PyList_GET_SIZE(tmp)) { |
9569 | PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration"); | ||||
9570 | goto failed; | ||||
9571 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9572 | asdl_seq_SET(body, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9573 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9574 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9575 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 9576 | *out = _PyAST_ExceptHandler(type, name, body, lineno, col_offset, |
9577 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9578 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9586 | } |
9587 | |||||
9588 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9589 | obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9590 | PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9591 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9592 | PyObject* tmp = NULL; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9593 | asdl_arg_seq* posonlyargs; |
9594 | asdl_arg_seq* args; | ||||
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9595 | arg_ty vararg; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9596 | asdl_arg_seq* kwonlyargs; |
9597 | asdl_expr_seq* kw_defaults; | ||||
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9598 | arg_ty kwarg; |
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9599 | asdl_expr_seq* defaults; |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9600 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9601 | if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) { |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 9602 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9613 | PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 9614 | goto failed; |
9615 | } | ||||
9616 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9617 | posonlyargs = _Py_asdl_arg_seq_new(len, arena); |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 9618 | if (posonlyargs == NULL) goto failed; |
9619 | for (i = 0; i < len; i++) { | ||||
9620 | arg_ty val; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9621 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9622 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9623 | res = obj2ast_arg(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9624 | Py_DECREF(tmp2); |
Pablo Galindo | 8c77b8c | 2019-04-29 13:36:57 +0100 | [diff] [blame] | 9625 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9634 | if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) { |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 9635 | 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 Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9646 | PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 9647 | goto failed; |
9648 | } | ||||
9649 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9650 | args = _Py_asdl_arg_seq_new(len, arena); |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 9651 | if (args == NULL) goto failed; |
9652 | for (i = 0; i < len; i++) { | ||||
9653 | arg_ty val; | ||||
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9654 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9655 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9656 | res = obj2ast_arg(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9657 | Py_DECREF(tmp2); |
Pablo Galindo | cd6e83b | 2019-07-15 01:32:18 +0200 | [diff] [blame] | 9658 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9667 | if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9668 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9669 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9670 | if (tmp == NULL || tmp == Py_None) { |
9671 | Py_CLEAR(tmp); | ||||
9672 | vararg = NULL; | ||||
9673 | } | ||||
9674 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9675 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9676 | res = obj2ast_arg(state, tmp, &vararg, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9677 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9678 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9679 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9680 | if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9681 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9688 | int res; |
9689 | Py_ssize_t len; | ||||
9690 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9691 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9692 | PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9693 | goto failed; |
9694 | } | ||||
9695 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9696 | kwonlyargs = _Py_asdl_arg_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9697 | if (kwonlyargs == NULL) goto failed; |
9698 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9699 | arg_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9700 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9701 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9702 | res = obj2ast_arg(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9703 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9704 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 9705 | if (len != PyList_GET_SIZE(tmp)) { |
9706 | PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration"); | ||||
9707 | goto failed; | ||||
9708 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9709 | asdl_seq_SET(kwonlyargs, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9710 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9711 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9712 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9713 | if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9714 | return 1; |
9715 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9716 | if (tmp == NULL) { |
9717 | PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); | ||||
9718 | return 1; | ||||
9719 | } | ||||
9720 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9721 | int res; |
9722 | Py_ssize_t len; | ||||
9723 | Py_ssize_t i; | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9724 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9725 | PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9726 | goto failed; |
9727 | } | ||||
9728 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9729 | kw_defaults = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9730 | if (kw_defaults == NULL) goto failed; |
9731 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9732 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9733 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9734 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9735 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9736 | Py_DECREF(tmp2); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9737 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 9738 | 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 Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9742 | asdl_seq_SET(kw_defaults, i, val); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9743 | } |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9744 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9745 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9746 | if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9747 | return 1; |
9748 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9749 | if (tmp == NULL || tmp == Py_None) { |
9750 | Py_CLEAR(tmp); | ||||
9751 | kwarg = NULL; | ||||
9752 | } | ||||
9753 | else { | ||||
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9754 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9755 | res = obj2ast_arg(state, tmp, &kwarg, arena); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9756 | if (res != 0) goto failed; |
Victor Stinner | b318990 | 2013-07-27 00:04:42 +0200 | [diff] [blame] | 9757 | Py_CLEAR(tmp); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9758 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9759 | if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9760 | 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 Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9767 | int res; |
9768 | Py_ssize_t len; | ||||
9769 | Py_ssize_t i; | ||||
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9770 | if (!PyList_Check(tmp)) { |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 9771 | PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp))); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9772 | goto failed; |
9773 | } | ||||
9774 | len = PyList_GET_SIZE(tmp); | ||||
Pablo Galindo | a5634c4 | 2020-09-16 19:42:00 +0100 | [diff] [blame] | 9775 | defaults = _Py_asdl_expr_seq_new(len, arena); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9776 | if (defaults == NULL) goto failed; |
9777 | for (i = 0; i < len; i++) { | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9778 | expr_ty val; |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9779 | PyObject *tmp2 = PyList_GET_ITEM(tmp, i); |
9780 | Py_INCREF(tmp2); | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9781 | res = obj2ast_expr(state, tmp2, &val, arena); |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 9782 | Py_DECREF(tmp2); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9783 | if (res != 0) goto failed; |
Serhiy Storchaka | cf38060 | 2016-10-07 21:51:28 +0300 | [diff] [blame] | 9784 | if (len != PyList_GET_SIZE(tmp)) { |
9785 | PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration"); | ||||
9786 | goto failed; | ||||
9787 | } | ||||
Yuan Chao Chou | 2af565b | 2017-08-04 10:53:12 -0700 | [diff] [blame] | 9788 | asdl_seq_SET(defaults, i, val); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9789 | } |
Victor Stinner | b318990 | 2013-07-27 00:04:42 +0200 | [diff] [blame] | 9790 | Py_CLEAR(tmp); |
Victor Stinner | ee4b59c | 2013-07-27 00:01:35 +0200 | [diff] [blame] | 9791 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 9792 | *out = _PyAST_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, |
9793 | kwarg, defaults, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9794 | return 0; |
9795 | failed: | ||||
9796 | Py_XDECREF(tmp); | ||||
9797 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9798 | } |
9799 | |||||
9800 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9801 | obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9802 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9803 | PyObject* tmp = NULL; |
9804 | identifier arg; | ||||
9805 | expr_ty annotation; | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 9806 | string type_comment; |
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9807 | int lineno; |
9808 | int col_offset; | ||||
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9809 | int end_lineno; |
9810 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9811 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9812 | if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9813 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9820 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9821 | res = obj2ast_identifier(state, tmp, &arg, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9822 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9823 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9824 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9825 | if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9826 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9827 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9828 | if (tmp == NULL || tmp == Py_None) { |
9829 | Py_CLEAR(tmp); | ||||
9830 | annotation = NULL; | ||||
9831 | } | ||||
9832 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9833 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9834 | res = obj2ast_expr(state, tmp, &annotation, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9835 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9836 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9837 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9838 | if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 9839 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9847 | res = obj2ast_string(state, tmp, &type_comment, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 9848 | if (res != 0) goto failed; |
9849 | Py_CLEAR(tmp); | ||||
9850 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9851 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9852 | 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 Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9859 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9860 | res = obj2ast_int(state, tmp, &lineno, arena); |
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9861 | if (res != 0) goto failed; |
9862 | Py_CLEAR(tmp); | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9863 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9864 | if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { |
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9865 | return 1; |
9866 | } | ||||
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9867 | if (tmp == NULL) { |
9868 | PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg"); | ||||
9869 | return 1; | ||||
9870 | } | ||||
9871 | else { | ||||
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9872 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9873 | res = obj2ast_int(state, tmp, &col_offset, arena); |
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9874 | if (res != 0) goto failed; |
9875 | Py_CLEAR(tmp); | ||||
Victor Stinner | c106c68 | 2015-11-06 17:01:48 +0100 | [diff] [blame] | 9876 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9877 | if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9878 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9886 | res = obj2ast_int(state, tmp, &end_lineno, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9887 | if (res != 0) goto failed; |
9888 | Py_CLEAR(tmp); | ||||
9889 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9890 | if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9891 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9899 | res = obj2ast_int(state, tmp, &end_col_offset, arena); |
Ivan Levkivskyi | 9932a22 | 2019-01-22 11:18:22 +0000 | [diff] [blame] | 9900 | if (res != 0) goto failed; |
9901 | Py_CLEAR(tmp); | ||||
9902 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 9903 | *out = _PyAST_arg(arg, annotation, type_comment, lineno, col_offset, |
9904 | end_lineno, end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9905 | return 0; |
9906 | failed: | ||||
9907 | Py_XDECREF(tmp); | ||||
9908 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9909 | } |
9910 | |||||
9911 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 9912 | obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out, |
9913 | PyArena* arena) | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9914 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9915 | PyObject* tmp = NULL; |
9916 | identifier arg; | ||||
9917 | expr_ty value; | ||||
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9918 | int lineno; |
9919 | int col_offset; | ||||
9920 | int end_lineno; | ||||
9921 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 9922 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9923 | if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9924 | return 1; |
9925 | } | ||||
9926 | if (tmp == NULL || tmp == Py_None) { | ||||
9927 | Py_CLEAR(tmp); | ||||
9928 | arg = NULL; | ||||
9929 | } | ||||
9930 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9931 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9932 | res = obj2ast_identifier(state, tmp, &arg, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9933 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9934 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9935 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9936 | if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 9937 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9944 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9945 | res = obj2ast_expr(state, tmp, &value, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9946 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 9947 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 9948 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9949 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9950 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9958 | res = obj2ast_int(state, tmp, &lineno, arena); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9959 | if (res != 0) goto failed; |
9960 | Py_CLEAR(tmp); | ||||
9961 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9962 | if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) { |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9963 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9971 | res = obj2ast_int(state, tmp, &col_offset, arena); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9972 | if (res != 0) goto failed; |
9973 | Py_CLEAR(tmp); | ||||
9974 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9975 | if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) { |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9976 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9984 | res = obj2ast_int(state, tmp, &end_lineno, arena); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9985 | if (res != 0) goto failed; |
9986 | Py_CLEAR(tmp); | ||||
9987 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9988 | if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) { |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9989 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 9997 | res = obj2ast_int(state, tmp, &end_col_offset, arena); |
Pablo Galindo | 168660b | 2020-04-02 00:47:39 +0100 | [diff] [blame] | 9998 | if (res != 0) goto failed; |
9999 | Py_CLEAR(tmp); | ||||
10000 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 10001 | *out = _PyAST_keyword(arg, value, lineno, col_offset, end_lineno, |
10002 | end_col_offset, arena); | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10003 | return 0; |
10004 | failed: | ||||
10005 | Py_XDECREF(tmp); | ||||
10006 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10007 | } |
10008 | |||||
10009 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 10010 | obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena* |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10011 | arena) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10012 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10013 | PyObject* tmp = NULL; |
10014 | identifier name; | ||||
10015 | identifier asname; | ||||
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 10016 | int lineno; |
10017 | int col_offset; | ||||
10018 | int end_lineno; | ||||
10019 | int end_col_offset; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10020 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10021 | if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10022 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10029 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10030 | res = obj2ast_identifier(state, tmp, &name, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10031 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 10032 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10033 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10034 | if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) { |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10035 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10036 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10037 | if (tmp == NULL || tmp == Py_None) { |
10038 | Py_CLEAR(tmp); | ||||
10039 | asname = NULL; | ||||
10040 | } | ||||
10041 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10042 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10043 | res = obj2ast_identifier(state, tmp, &asname, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10044 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 10045 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10046 | } |
Matthew Suozzo | 75a06f0 | 2021-04-10 16:56:28 -0400 | [diff] [blame] | 10047 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10101 | return 0; |
10102 | failed: | ||||
10103 | Py_XDECREF(tmp); | ||||
10104 | return 1; | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10105 | } |
10106 | |||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 10107 | int |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 10108 | obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out, |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10109 | PyArena* arena) |
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 10110 | { |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10111 | PyObject* tmp = NULL; |
10112 | expr_ty context_expr; | ||||
10113 | expr_ty optional_vars; | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 10114 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10115 | if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) { |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10116 | 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 Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10123 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10124 | res = obj2ast_expr(state, tmp, &context_expr, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10125 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 10126 | Py_CLEAR(tmp); |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10127 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10128 | if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) { |
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 10129 | return 1; |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10130 | } |
Serhiy Storchaka | f320be7 | 2018-01-25 10:49:40 +0200 | [diff] [blame] | 10131 | if (tmp == NULL || tmp == Py_None) { |
10132 | Py_CLEAR(tmp); | ||||
10133 | optional_vars = NULL; | ||||
10134 | } | ||||
10135 | else { | ||||
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10136 | int res; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10137 | res = obj2ast_expr(state, tmp, &optional_vars, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10138 | if (res != 0) goto failed; |
Victor Stinner | 1acc129 | 2013-07-27 00:03:47 +0200 | [diff] [blame] | 10139 | Py_CLEAR(tmp); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10140 | } |
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 10141 | *out = _PyAST_withitem(context_expr, optional_vars, arena); |
Victor Stinner | ce72e1c | 2013-07-27 00:00:36 +0200 | [diff] [blame] | 10142 | return 0; |
10143 | failed: | ||||
10144 | Py_XDECREF(tmp); | ||||
10145 | return 1; | ||||
Benjamin Peterson | bf1bbc1 | 2011-05-27 13:58:08 -0500 | [diff] [blame] | 10146 | } |
10147 | |||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10148 | int |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 10149 | obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out, |
10150 | PyArena* arena) | ||||
10151 | { | ||||
10152 | PyObject* tmp = NULL; | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 10153 | pattern_ty pattern; |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 10154 | 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 Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 10166 | res = obj2ast_pattern(state, tmp, &pattern, arena); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 10167 | 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 Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 10216 | *out = _PyAST_match_case(pattern, guard, body, arena); |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 10217 | return 0; |
10218 | failed: | ||||
10219 | Py_XDECREF(tmp); | ||||
10220 | return 1; | ||||
10221 | } | ||||
10222 | |||||
10223 | int | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 10224 | obj2ast_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 | |||||
10732 | int | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 10733 | obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty* |
10734 | out, PyArena* arena) | ||||
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10735 | { |
10736 | int isinstance; | ||||
10737 | |||||
10738 | PyObject *tmp = NULL; | ||||
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 10739 | PyObject *tp; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10740 | |
10741 | if (obj == Py_None) { | ||||
10742 | *out = NULL; | ||||
10743 | return 0; | ||||
10744 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10745 | tp = state->TypeIgnore_type; |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 10746 | isinstance = PyObject_IsInstance(obj, tp); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10747 | if (isinstance == -1) { |
10748 | return 1; | ||||
10749 | } | ||||
10750 | if (isinstance) { | ||||
10751 | int lineno; | ||||
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 10752 | string tag; |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10753 | |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10754 | if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) { |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10755 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10763 | res = obj2ast_int(state, tmp, &lineno, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10764 | if (res != 0) goto failed; |
10765 | Py_CLEAR(tmp); | ||||
10766 | } | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10767 | if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) { |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 10768 | 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 Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10776 | res = obj2ast_string(state, tmp, &tag, arena); |
Michael J. Sullivan | 933e150 | 2019-05-22 07:54:20 -0700 | [diff] [blame] | 10777 | if (res != 0) goto failed; |
10778 | Py_CLEAR(tmp); | ||||
10779 | } | ||||
Victor Stinner | d27f8d2 | 2021-04-07 21:34:22 +0200 | [diff] [blame] | 10780 | *out = _PyAST_TypeIgnore(lineno, tag, arena); |
Guido van Rossum | dcfcd14 | 2019-01-31 03:40:27 -0800 | [diff] [blame] | 10781 | 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öwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 10791 | |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10792 | static int |
10793 | astmodule_exec(PyObject *m) | ||||
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 10794 | { |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 10795 | struct ast_state *state = get_ast_state(); |
10796 | if (state == NULL) { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10797 | return -1; |
Victor Stinner | 91e1bc1 | 2020-07-03 14:15:53 +0200 | [diff] [blame] | 10798 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10799 | if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10800 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10801 | } |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10802 | if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10803 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10804 | } |
10805 | if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10806 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10807 | } |
10808 | if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10809 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10810 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10811 | if (PyModule_AddObjectRef(m, "mod", state->mod_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10812 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10813 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10814 | if (PyModule_AddObjectRef(m, "Module", state->Module_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10815 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10816 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10817 | if (PyModule_AddObjectRef(m, "Interactive", state->Interactive_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10818 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10819 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10820 | if (PyModule_AddObjectRef(m, "Expression", state->Expression_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10821 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10822 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10823 | if (PyModule_AddObjectRef(m, "FunctionType", state->FunctionType_type) < 0) |
10824 | { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10825 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10826 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10827 | if (PyModule_AddObjectRef(m, "stmt", state->stmt_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10828 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10829 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10830 | if (PyModule_AddObjectRef(m, "FunctionDef", state->FunctionDef_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10831 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10832 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10833 | 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 Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 10873 | if (PyModule_AddObjectRef(m, "Match", state->Match_type) < 0) { |
10874 | return -1; | ||||
10875 | } | ||||
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10876 | 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 Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10965 | < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10966 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 10967 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10968 | if (PyModule_AddObjectRef(m, "JoinedStr", state->JoinedStr_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10969 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10970 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10971 | if (PyModule_AddObjectRef(m, "Constant", state->Constant_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10972 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10973 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10974 | if (PyModule_AddObjectRef(m, "Attribute", state->Attribute_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10975 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10976 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10977 | if (PyModule_AddObjectRef(m, "Subscript", state->Subscript_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10978 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10979 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10980 | if (PyModule_AddObjectRef(m, "Starred", state->Starred_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10981 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10982 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10983 | if (PyModule_AddObjectRef(m, "Name", state->Name_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10984 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10985 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10986 | if (PyModule_AddObjectRef(m, "List", state->List_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10987 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10988 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10989 | if (PyModule_AddObjectRef(m, "Tuple", state->Tuple_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10990 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10991 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10992 | if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10993 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10994 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10995 | if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0) |
10996 | { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 10997 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 10998 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 10999 | if (PyModule_AddObjectRef(m, "Load", state->Load_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11000 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11001 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11002 | if (PyModule_AddObjectRef(m, "Store", state->Store_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11003 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11004 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11005 | if (PyModule_AddObjectRef(m, "Del", state->Del_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11006 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11007 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11008 | if (PyModule_AddObjectRef(m, "boolop", state->boolop_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11009 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11010 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11011 | if (PyModule_AddObjectRef(m, "And", state->And_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11012 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11013 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11014 | if (PyModule_AddObjectRef(m, "Or", state->Or_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11015 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11016 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11017 | if (PyModule_AddObjectRef(m, "operator", state->operator_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11018 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11019 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11020 | if (PyModule_AddObjectRef(m, "Add", state->Add_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11021 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11022 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11023 | if (PyModule_AddObjectRef(m, "Sub", state->Sub_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11024 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11025 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11026 | if (PyModule_AddObjectRef(m, "Mult", state->Mult_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11027 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11028 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11029 | if (PyModule_AddObjectRef(m, "MatMult", state->MatMult_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11030 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11031 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11032 | if (PyModule_AddObjectRef(m, "Div", state->Div_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11033 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11034 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11035 | if (PyModule_AddObjectRef(m, "Mod", state->Mod_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11036 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11037 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11038 | if (PyModule_AddObjectRef(m, "Pow", state->Pow_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11039 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11040 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11041 | if (PyModule_AddObjectRef(m, "LShift", state->LShift_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11042 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11043 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11044 | if (PyModule_AddObjectRef(m, "RShift", state->RShift_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11045 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11046 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11047 | if (PyModule_AddObjectRef(m, "BitOr", state->BitOr_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11048 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11049 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11050 | if (PyModule_AddObjectRef(m, "BitXor", state->BitXor_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11051 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11052 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11053 | if (PyModule_AddObjectRef(m, "BitAnd", state->BitAnd_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11054 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11055 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11056 | if (PyModule_AddObjectRef(m, "FloorDiv", state->FloorDiv_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11057 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11058 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11059 | if (PyModule_AddObjectRef(m, "unaryop", state->unaryop_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11060 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11061 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11062 | if (PyModule_AddObjectRef(m, "Invert", state->Invert_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11063 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11064 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11065 | if (PyModule_AddObjectRef(m, "Not", state->Not_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11066 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11067 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11068 | if (PyModule_AddObjectRef(m, "UAdd", state->UAdd_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11069 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11070 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11071 | if (PyModule_AddObjectRef(m, "USub", state->USub_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11072 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11073 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11074 | if (PyModule_AddObjectRef(m, "cmpop", state->cmpop_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11075 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11076 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11077 | if (PyModule_AddObjectRef(m, "Eq", state->Eq_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11078 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11079 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11080 | if (PyModule_AddObjectRef(m, "NotEq", state->NotEq_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11081 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11082 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11083 | if (PyModule_AddObjectRef(m, "Lt", state->Lt_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11084 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11085 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11086 | if (PyModule_AddObjectRef(m, "LtE", state->LtE_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11087 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11088 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11089 | if (PyModule_AddObjectRef(m, "Gt", state->Gt_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11090 | return -1; |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11091 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11092 | 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 Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11108 | 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11109 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11110 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11111 | if (PyModule_AddObjectRef(m, "excepthandler", state->excepthandler_type) < |
11112 | 0) { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11113 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11114 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11115 | if (PyModule_AddObjectRef(m, "ExceptHandler", state->ExceptHandler_type) < |
11116 | 0) { | ||||
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11117 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11118 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11119 | if (PyModule_AddObjectRef(m, "arguments", state->arguments_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11120 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11121 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11122 | if (PyModule_AddObjectRef(m, "arg", state->arg_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11123 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11124 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11125 | if (PyModule_AddObjectRef(m, "keyword", state->keyword_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11126 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11127 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11128 | if (PyModule_AddObjectRef(m, "alias", state->alias_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11129 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11130 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11131 | if (PyModule_AddObjectRef(m, "withitem", state->withitem_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11132 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11133 | } |
Brandt Bucher | 145bf26 | 2021-02-26 14:51:55 -0800 | [diff] [blame] | 11134 | if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) { |
11135 | return -1; | ||||
11136 | } | ||||
Nick Coghlan | 1e7b858 | 2021-04-29 15:58:44 +1000 | [diff] [blame] | 11137 | 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 Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11167 | if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11168 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11169 | } |
Victor Stinner | 18ce7f1 | 2020-11-04 16:37:07 +0100 | [diff] [blame] | 11170 | if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) { |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11171 | return -1; |
Brandt Bucher | d2f9667 | 2020-02-06 06:45:46 -0800 | [diff] [blame] | 11172 | } |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11173 | return 0; |
11174 | } | ||||
Victor Stinner | 91e1bc1 | 2020-07-03 14:15:53 +0200 | [diff] [blame] | 11175 | |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11176 | static PyModuleDef_Slot astmodule_slots[] = { |
11177 | {Py_mod_exec, astmodule_exec}, | ||||
11178 | {0, NULL} | ||||
11179 | }; | ||||
11180 | |||||
11181 | static struct PyModuleDef _astmodule = { | ||||
11182 | PyModuleDef_HEAD_INIT, | ||||
11183 | .m_name = "_ast", | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 11184 | // The _ast module uses a per-interpreter state (PyInterpreterState.ast) |
Victor Stinner | e5fbe0c | 2020-09-15 18:03:34 +0200 | [diff] [blame] | 11185 | .m_size = 0, |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11186 | .m_slots = astmodule_slots, |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11187 | }; |
11188 | |||||
11189 | PyMODINIT_FUNC | ||||
11190 | PyInit__ast(void) | ||||
11191 | { | ||||
11192 | return PyModuleDef_Init(&_astmodule); | ||||
Martin v. Löwis | 577b5b9 | 2006-02-27 15:23:19 +0000 | [diff] [blame] | 11193 | } |
11194 | |||||
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 11195 | |
Martin v. Löwis | bd260da | 2006-02-26 19:42:26 +0000 | [diff] [blame] | 11196 | PyObject* PyAST_mod2obj(mod_ty t) |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 11197 | { |
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 11198 | struct ast_state *state = get_ast_state(); |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11199 | if (state == NULL) { |
Victor Stinner | bdf630c | 2013-07-17 00:17:15 +0200 | [diff] [blame] | 11200 | return NULL; |
Victor Stinner | 91e1bc1 | 2020-07-03 14:15:53 +0200 | [diff] [blame] | 11201 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11202 | return ast2obj_mod(state, t); |
Jeremy Hylton | 3e0055f | 2005-10-20 19:59:25 +0000 | [diff] [blame] | 11203 | } |
Martin v. Löwis | 5b22213 | 2007-06-10 09:51:05 +0000 | [diff] [blame] | 11204 | |
Neal Norwitz | db4115f | 2008-03-31 04:20:05 +0000 | [diff] [blame] | 11205 | /* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */ |
11206 | mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) | ||||
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 11207 | { |
Serhiy Storchaka | 43c9731 | 2019-09-10 13:02:30 +0300 | [diff] [blame] | 11208 | const char * const req_name[] = {"Module", "Expression", "Interactive"}; |
Benjamin Peterson | 0496c9e | 2009-12-13 01:24:58 +0000 | [diff] [blame] | 11209 | int isinstance; |
Benjamin Peterson | 42ec031 | 2014-02-10 22:41:40 -0500 | [diff] [blame] | 11210 | |
Steve Dower | b82e17e | 2019-05-23 08:45:22 -0700 | [diff] [blame] | 11211 | if (PySys_Audit("compile", "OO", ast, Py_None) < 0) { |
11212 | return NULL; | ||||
11213 | } | ||||
11214 | |||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 11215 | struct ast_state *state = get_ast_state(); |
11216 | if (state == NULL) { | ||||
11217 | return NULL; | ||||
11218 | } | ||||
11219 | |||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11220 | 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 Peterson | 42ec031 | 2014-02-10 22:41:40 -0500 | [diff] [blame] | 11224 | |
Guido van Rossum | 3a32e3b | 2019-02-01 11:37:34 -0800 | [diff] [blame] | 11225 | assert(0 <= mode && mode <= 2); |
Neal Norwitz | db4115f | 2008-03-31 04:20:05 +0000 | [diff] [blame] | 11226 | |
Benjamin Peterson | 0496c9e | 2009-12-13 01:24:58 +0000 | [diff] [blame] | 11227 | isinstance = PyObject_IsInstance(ast, req_type[mode]); |
11228 | if (isinstance == -1) | ||||
11229 | return NULL; | ||||
11230 | if (!isinstance) { | ||||
Neal Norwitz | db4115f | 2008-03-31 04:20:05 +0000 | [diff] [blame] | 11231 | PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s", |
Dino Viehland | ac46eb4 | 2019-09-11 10:16:34 -0700 | [diff] [blame] | 11232 | req_name[mode], _PyType_Name(Py_TYPE(ast))); |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 11233 | return NULL; |
11234 | } | ||||
Dong-hee Na | a05fcd3 | 2019-10-10 16:41:26 +0900 | [diff] [blame] | 11235 | |
11236 | mod_ty res = NULL; | ||||
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11237 | if (obj2ast_mod(state, ast, &res, arena) != 0) |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 11238 | return NULL; |
11239 | else | ||||
11240 | return res; | ||||
11241 | } | ||||
11242 | |||||
11243 | int PyAST_Check(PyObject* obj) | ||||
11244 | { | ||||
Victor Stinner | 5cf4782 | 2020-11-02 22:03:28 +0100 | [diff] [blame] | 11245 | struct ast_state *state = get_ast_state(); |
Victor Stinner | b1cc6ba | 2020-07-03 20:01:46 +0200 | [diff] [blame] | 11246 | if (state == NULL) { |
Victor Stinner | bdf630c | 2013-07-17 00:17:15 +0200 | [diff] [blame] | 11247 | return -1; |
Victor Stinner | 91e1bc1 | 2020-07-03 14:15:53 +0200 | [diff] [blame] | 11248 | } |
Victor Stinner | 74419f0 | 2020-07-03 11:35:37 +0200 | [diff] [blame] | 11249 | return PyObject_IsInstance(obj, state->AST_type); |
Martin v. Löwis | 618dc5e | 2008-03-30 20:03:44 +0000 | [diff] [blame] | 11250 | } |
11251 | |||||
Martin v. Löwis | 5b22213 | 2007-06-10 09:51:05 +0000 | [diff] [blame] | 11252 |