blob: 60147fa15b4a592567e3703f0bafd6d9fbabc355 [file] [log] [blame]
Thomas Wouterscf297e42007-02-23 15:07:44 +00001/* File automatically generated by Parser/asdl_c.py. */
2
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07003#include <stddef.h>
4
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005#include "Python.h"
6#include "Python-ast.h"
7
Neal Norwitz207c9f32008-03-31 04:42:11 +00008static PyTypeObject AST_type;
Neal Norwitz53d960c2006-02-28 22:47:29 +00009static PyTypeObject *mod_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010static PyObject* ast2obj_mod(void*);
Neal Norwitz53d960c2006-02-28 22:47:29 +000011static PyTypeObject *Module_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020012_Py_IDENTIFIER(body);
Neal Norwitz53d960c2006-02-28 22:47:29 +000013static char *Module_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000014 "body",
15};
Neal Norwitz53d960c2006-02-28 22:47:29 +000016static PyTypeObject *Interactive_type;
17static char *Interactive_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000018 "body",
19};
Neal Norwitz53d960c2006-02-28 22:47:29 +000020static PyTypeObject *Expression_type;
21static char *Expression_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000022 "body",
23};
Neal Norwitz53d960c2006-02-28 22:47:29 +000024static PyTypeObject *Suite_type;
25static char *Suite_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000026 "body",
27};
Neal Norwitz53d960c2006-02-28 22:47:29 +000028static PyTypeObject *stmt_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020029_Py_IDENTIFIER(lineno);
30_Py_IDENTIFIER(col_offset);
Neal Norwitz53d960c2006-02-28 22:47:29 +000031static char *stmt_attributes[] = {
Martin v. Löwis577b5b92006-02-27 15:23:19 +000032 "lineno",
Martin v. Löwis49c5da12006-03-01 22:49:05 +000033 "col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +000034};
Martin v. Löwisbd260da2006-02-26 19:42:26 +000035static PyObject* ast2obj_stmt(void*);
Neal Norwitz53d960c2006-02-28 22:47:29 +000036static PyTypeObject *FunctionDef_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020037_Py_IDENTIFIER(name);
38_Py_IDENTIFIER(args);
39_Py_IDENTIFIER(decorator_list);
40_Py_IDENTIFIER(returns);
Neal Norwitz53d960c2006-02-28 22:47:29 +000041static char *FunctionDef_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000042 "name",
43 "args",
44 "body",
Guido van Rossumd59da4b2007-05-22 18:11:13 +000045 "decorator_list",
Neal Norwitzc1505362006-12-28 06:47:50 +000046 "returns",
Martin v. Löwisbd260da2006-02-26 19:42:26 +000047};
Neal Norwitz53d960c2006-02-28 22:47:29 +000048static PyTypeObject *ClassDef_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020049_Py_IDENTIFIER(bases);
50_Py_IDENTIFIER(keywords);
51_Py_IDENTIFIER(starargs);
52_Py_IDENTIFIER(kwargs);
Neal Norwitz53d960c2006-02-28 22:47:29 +000053static char *ClassDef_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000054 "name",
55 "bases",
Guido van Rossum52cc1d82007-03-18 15:41:51 +000056 "keywords",
57 "starargs",
58 "kwargs",
Martin v. Löwisbd260da2006-02-26 19:42:26 +000059 "body",
Guido van Rossumd59da4b2007-05-22 18:11:13 +000060 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +000061};
Neal Norwitz53d960c2006-02-28 22:47:29 +000062static PyTypeObject *Return_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020063_Py_IDENTIFIER(value);
Neal Norwitz53d960c2006-02-28 22:47:29 +000064static char *Return_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000065 "value",
66};
Neal Norwitz53d960c2006-02-28 22:47:29 +000067static PyTypeObject *Delete_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020068_Py_IDENTIFIER(targets);
Neal Norwitz53d960c2006-02-28 22:47:29 +000069static char *Delete_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000070 "targets",
71};
Neal Norwitz53d960c2006-02-28 22:47:29 +000072static PyTypeObject *Assign_type;
73static char *Assign_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000074 "targets",
75 "value",
76};
Neal Norwitz53d960c2006-02-28 22:47:29 +000077static PyTypeObject *AugAssign_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020078_Py_IDENTIFIER(target);
79_Py_IDENTIFIER(op);
Neal Norwitz53d960c2006-02-28 22:47:29 +000080static char *AugAssign_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000081 "target",
82 "op",
83 "value",
84};
Neal Norwitz53d960c2006-02-28 22:47:29 +000085static PyTypeObject *For_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020086_Py_IDENTIFIER(iter);
87_Py_IDENTIFIER(orelse);
Neal Norwitz53d960c2006-02-28 22:47:29 +000088static char *For_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000089 "target",
90 "iter",
91 "body",
92 "orelse",
93};
Neal Norwitz53d960c2006-02-28 22:47:29 +000094static PyTypeObject *While_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020095_Py_IDENTIFIER(test);
Neal Norwitz53d960c2006-02-28 22:47:29 +000096static char *While_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +000097 "test",
98 "body",
99 "orelse",
100};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000101static PyTypeObject *If_type;
102static char *If_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000103 "test",
104 "body",
105 "orelse",
106};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000107static PyTypeObject *With_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200108_Py_IDENTIFIER(items);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000109static char *With_fields[]={
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500110 "items",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000111 "body",
112};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000113static PyTypeObject *Raise_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200114_Py_IDENTIFIER(exc);
115_Py_IDENTIFIER(cause);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000116static char *Raise_fields[]={
Collin Winter828f04a2007-08-31 00:04:24 +0000117 "exc",
118 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000119};
Benjamin Peterson43af12b2011-05-29 11:43:10 -0500120static PyTypeObject *Try_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200121_Py_IDENTIFIER(handlers);
122_Py_IDENTIFIER(finalbody);
Benjamin Peterson43af12b2011-05-29 11:43:10 -0500123static char *Try_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000124 "body",
125 "handlers",
126 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000127 "finalbody",
128};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000129static PyTypeObject *Assert_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200130_Py_IDENTIFIER(msg);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000131static char *Assert_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000132 "test",
133 "msg",
134};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000135static PyTypeObject *Import_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200136_Py_IDENTIFIER(names);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000137static char *Import_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000138 "names",
139};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000140static PyTypeObject *ImportFrom_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200141_Py_IDENTIFIER(module);
142_Py_IDENTIFIER(level);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000143static char *ImportFrom_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000144 "module",
145 "names",
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000146 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000147};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000148static PyTypeObject *Global_type;
149static char *Global_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000150 "names",
151};
Jeremy Hylton81e95022007-02-27 06:50:52 +0000152static PyTypeObject *Nonlocal_type;
153static char *Nonlocal_fields[]={
154 "names",
155};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000156static PyTypeObject *Expr_type;
157static char *Expr_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000158 "value",
159};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000160static PyTypeObject *Pass_type;
161static PyTypeObject *Break_type;
162static PyTypeObject *Continue_type;
163static PyTypeObject *expr_type;
164static char *expr_attributes[] = {
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000165 "lineno",
Martin v. Löwis49c5da12006-03-01 22:49:05 +0000166 "col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000167};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000168static PyObject* ast2obj_expr(void*);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000169static PyTypeObject *BoolOp_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200170_Py_IDENTIFIER(values);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000171static char *BoolOp_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000172 "op",
173 "values",
174};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000175static PyTypeObject *BinOp_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200176_Py_IDENTIFIER(left);
177_Py_IDENTIFIER(right);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000178static char *BinOp_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000179 "left",
180 "op",
181 "right",
182};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000183static PyTypeObject *UnaryOp_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200184_Py_IDENTIFIER(operand);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000185static char *UnaryOp_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000186 "op",
187 "operand",
188};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000189static PyTypeObject *Lambda_type;
190static char *Lambda_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000191 "args",
192 "body",
193};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000194static PyTypeObject *IfExp_type;
195static char *IfExp_fields[]={
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000196 "test",
197 "body",
198 "orelse",
199};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000200static PyTypeObject *Dict_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200201_Py_IDENTIFIER(keys);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000202static char *Dict_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000203 "keys",
204 "values",
205};
Guido van Rossum86e58e22006-08-28 15:27:34 +0000206static PyTypeObject *Set_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200207_Py_IDENTIFIER(elts);
Guido van Rossum86e58e22006-08-28 15:27:34 +0000208static char *Set_fields[]={
209 "elts",
210};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000211static PyTypeObject *ListComp_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200212_Py_IDENTIFIER(elt);
213_Py_IDENTIFIER(generators);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000214static char *ListComp_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000215 "elt",
216 "generators",
217};
Nick Coghlan650f0d02007-04-15 12:05:43 +0000218static PyTypeObject *SetComp_type;
219static char *SetComp_fields[]={
220 "elt",
221 "generators",
222};
Guido van Rossum992d4a32007-07-11 13:09:30 +0000223static PyTypeObject *DictComp_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200224_Py_IDENTIFIER(key);
Guido van Rossum992d4a32007-07-11 13:09:30 +0000225static char *DictComp_fields[]={
226 "key",
227 "value",
228 "generators",
229};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000230static PyTypeObject *GeneratorExp_type;
231static char *GeneratorExp_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000232 "elt",
233 "generators",
234};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000235static PyTypeObject *Yield_type;
236static char *Yield_fields[]={
Benjamin Peterson527c6222012-01-14 08:58:23 -0500237 "value",
238};
239static PyTypeObject *YieldFrom_type;
240static char *YieldFrom_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000241 "value",
242};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000243static PyTypeObject *Compare_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200244_Py_IDENTIFIER(ops);
245_Py_IDENTIFIER(comparators);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000246static char *Compare_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000247 "left",
248 "ops",
249 "comparators",
250};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000251static PyTypeObject *Call_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200252_Py_IDENTIFIER(func);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000253static char *Call_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000254 "func",
255 "args",
256 "keywords",
257 "starargs",
258 "kwargs",
259};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000260static PyTypeObject *Num_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200261_Py_IDENTIFIER(n);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000262static char *Num_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000263 "n",
264};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000265static PyTypeObject *Str_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200266_Py_IDENTIFIER(s);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000267static char *Str_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000268 "s",
269};
Thomas Wouters00e41de2007-02-23 19:56:57 +0000270static PyTypeObject *Bytes_type;
271static char *Bytes_fields[]={
272 "s",
273};
Georg Brandl52318d62006-09-06 07:06:08 +0000274static PyTypeObject *Ellipsis_type;
Neal Norwitz53d960c2006-02-28 22:47:29 +0000275static PyTypeObject *Attribute_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200276_Py_IDENTIFIER(attr);
277_Py_IDENTIFIER(ctx);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000278static char *Attribute_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000279 "value",
280 "attr",
281 "ctx",
282};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000283static PyTypeObject *Subscript_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200284_Py_IDENTIFIER(slice);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000285static char *Subscript_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000286 "value",
287 "slice",
288 "ctx",
289};
Guido van Rossum0368b722007-05-11 16:50:42 +0000290static PyTypeObject *Starred_type;
291static char *Starred_fields[]={
292 "value",
293 "ctx",
294};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000295static PyTypeObject *Name_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200296_Py_IDENTIFIER(id);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000297static char *Name_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000298 "id",
299 "ctx",
300};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000301static PyTypeObject *List_type;
302static char *List_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000303 "elts",
304 "ctx",
305};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000306static PyTypeObject *Tuple_type;
307static char *Tuple_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000308 "elts",
309 "ctx",
310};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000311static PyTypeObject *expr_context_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000312static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
313*AugLoad_singleton, *AugStore_singleton, *Param_singleton;
314static PyObject* ast2obj_expr_context(expr_context_ty);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000315static PyTypeObject *Load_type;
316static PyTypeObject *Store_type;
317static PyTypeObject *Del_type;
318static PyTypeObject *AugLoad_type;
319static PyTypeObject *AugStore_type;
320static PyTypeObject *Param_type;
321static PyTypeObject *slice_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000322static PyObject* ast2obj_slice(void*);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000323static PyTypeObject *Slice_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200324_Py_IDENTIFIER(lower);
325_Py_IDENTIFIER(upper);
326_Py_IDENTIFIER(step);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000327static char *Slice_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000328 "lower",
329 "upper",
330 "step",
331};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000332static PyTypeObject *ExtSlice_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200333_Py_IDENTIFIER(dims);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000334static char *ExtSlice_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000335 "dims",
336};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000337static PyTypeObject *Index_type;
338static char *Index_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000339 "value",
340};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000341static PyTypeObject *boolop_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000342static PyObject *And_singleton, *Or_singleton;
343static PyObject* ast2obj_boolop(boolop_ty);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000344static PyTypeObject *And_type;
345static PyTypeObject *Or_type;
346static PyTypeObject *operator_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000347static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
348*Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton,
349*RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton,
350*FloorDiv_singleton;
351static PyObject* ast2obj_operator(operator_ty);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000352static PyTypeObject *Add_type;
353static PyTypeObject *Sub_type;
354static PyTypeObject *Mult_type;
355static PyTypeObject *Div_type;
356static PyTypeObject *Mod_type;
357static PyTypeObject *Pow_type;
358static PyTypeObject *LShift_type;
359static PyTypeObject *RShift_type;
360static PyTypeObject *BitOr_type;
361static PyTypeObject *BitXor_type;
362static PyTypeObject *BitAnd_type;
363static PyTypeObject *FloorDiv_type;
364static PyTypeObject *unaryop_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000365static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
366*USub_singleton;
367static PyObject* ast2obj_unaryop(unaryop_ty);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000368static PyTypeObject *Invert_type;
369static PyTypeObject *Not_type;
370static PyTypeObject *UAdd_type;
371static PyTypeObject *USub_type;
372static PyTypeObject *cmpop_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000373static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
374*Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
375*NotIn_singleton;
376static PyObject* ast2obj_cmpop(cmpop_ty);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000377static PyTypeObject *Eq_type;
378static PyTypeObject *NotEq_type;
379static PyTypeObject *Lt_type;
380static PyTypeObject *LtE_type;
381static PyTypeObject *Gt_type;
382static PyTypeObject *GtE_type;
383static PyTypeObject *Is_type;
384static PyTypeObject *IsNot_type;
385static PyTypeObject *In_type;
386static PyTypeObject *NotIn_type;
387static PyTypeObject *comprehension_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000388static PyObject* ast2obj_comprehension(void*);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200389_Py_IDENTIFIER(ifs);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000390static char *comprehension_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000391 "target",
392 "iter",
393 "ifs",
394};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000395static PyTypeObject *excepthandler_type;
Neal Norwitzad74aa82008-03-31 05:14:30 +0000396static char *excepthandler_attributes[] = {
397 "lineno",
398 "col_offset",
399};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000400static PyObject* ast2obj_excepthandler(void*);
Neal Norwitzad74aa82008-03-31 05:14:30 +0000401static PyTypeObject *ExceptHandler_type;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200402_Py_IDENTIFIER(type);
Neal Norwitzad74aa82008-03-31 05:14:30 +0000403static char *ExceptHandler_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000404 "type",
405 "name",
406 "body",
407};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000408static PyTypeObject *arguments_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000409static PyObject* ast2obj_arguments(void*);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200410_Py_IDENTIFIER(vararg);
411_Py_IDENTIFIER(varargannotation);
412_Py_IDENTIFIER(kwonlyargs);
413_Py_IDENTIFIER(kwarg);
414_Py_IDENTIFIER(kwargannotation);
415_Py_IDENTIFIER(defaults);
416_Py_IDENTIFIER(kw_defaults);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000417static char *arguments_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000418 "args",
419 "vararg",
Neal Norwitzc1505362006-12-28 06:47:50 +0000420 "varargannotation",
Guido van Rossum4f72a782006-10-27 23:31:49 +0000421 "kwonlyargs",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000422 "kwarg",
Neal Norwitzc1505362006-12-28 06:47:50 +0000423 "kwargannotation",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000424 "defaults",
Guido van Rossum4f72a782006-10-27 23:31:49 +0000425 "kw_defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000426};
Neal Norwitzc1505362006-12-28 06:47:50 +0000427static PyTypeObject *arg_type;
428static PyObject* ast2obj_arg(void*);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200429_Py_IDENTIFIER(arg);
430_Py_IDENTIFIER(annotation);
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000431static char *arg_fields[]={
Neal Norwitzc1505362006-12-28 06:47:50 +0000432 "arg",
433 "annotation",
434};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000435static PyTypeObject *keyword_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000436static PyObject* ast2obj_keyword(void*);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000437static char *keyword_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000438 "arg",
439 "value",
440};
Neal Norwitz53d960c2006-02-28 22:47:29 +0000441static PyTypeObject *alias_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000442static PyObject* ast2obj_alias(void*);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200443_Py_IDENTIFIER(asname);
Neal Norwitz53d960c2006-02-28 22:47:29 +0000444static char *alias_fields[]={
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000445 "name",
446 "asname",
447};
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500448static PyTypeObject *withitem_type;
449static PyObject* ast2obj_withitem(void*);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200450_Py_IDENTIFIER(context_expr);
451_Py_IDENTIFIER(optional_vars);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500452static char *withitem_fields[]={
453 "context_expr",
454 "optional_vars",
455};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000456
457
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700458typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100459 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700460 PyObject *dict;
461} AST_object;
462
Benjamin Peterson1767e022012-03-14 21:50:29 -0500463static void
464ast_dealloc(AST_object *self)
465{
466 Py_CLEAR(self->dict);
Antoine Pitrou50750742012-07-08 12:43:32 +0200467 Py_TYPE(self)->tp_free(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500468}
469
Neal Norwitz207c9f32008-03-31 04:42:11 +0000470static int
471ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
472{
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200473 _Py_IDENTIFIER(_fields);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000474 Py_ssize_t i, numfields = 0;
475 int res = -1;
476 PyObject *key, *value, *fields;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200477 fields = _PyObject_GetAttrId((PyObject*)Py_TYPE(self), &PyId__fields);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000478 if (!fields)
479 PyErr_Clear();
480 if (fields) {
481 numfields = PySequence_Size(fields);
482 if (numfields == -1)
483 goto cleanup;
484 }
485 res = 0; /* if no error occurs, this stays 0 to the end */
486 if (PyTuple_GET_SIZE(args) > 0) {
487 if (numfields != PyTuple_GET_SIZE(args)) {
488 PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
Amaury Forgeot d'Arc245c70b2008-09-10 22:24:24 +0000489 "%zd positional argument%s",
Neal Norwitz207c9f32008-03-31 04:42:11 +0000490 Py_TYPE(self)->tp_name,
491 numfields == 0 ? "" : "either 0 or ",
492 numfields, numfields == 1 ? "" : "s");
493 res = -1;
494 goto cleanup;
495 }
496 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
497 /* cannot be reached when fields is NULL */
498 PyObject *name = PySequence_GetItem(fields, i);
499 if (!name) {
500 res = -1;
501 goto cleanup;
502 }
503 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
504 Py_DECREF(name);
505 if (res < 0)
506 goto cleanup;
507 }
508 }
509 if (kw) {
510 i = 0; /* needed by PyDict_Next */
511 while (PyDict_Next(kw, &i, &key, &value)) {
512 res = PyObject_SetAttr(self, key, value);
513 if (res < 0)
514 goto cleanup;
515 }
516 }
517 cleanup:
518 Py_XDECREF(fields);
519 return res;
520}
521
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000522/* Pickling support */
523static PyObject *
524ast_type_reduce(PyObject *self, PyObject *unused)
525{
526 PyObject *res;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200527 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200528 PyObject *dict = _PyObject_GetAttrId(self, &PyId___dict__);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000529 if (dict == NULL) {
530 if (PyErr_ExceptionMatches(PyExc_AttributeError))
531 PyErr_Clear();
532 else
533 return NULL;
534 }
535 if (dict) {
536 res = Py_BuildValue("O()O", Py_TYPE(self), dict);
537 Py_DECREF(dict);
538 return res;
539 }
540 return Py_BuildValue("O()", Py_TYPE(self));
541}
542
543static PyMethodDef ast_type_methods[] = {
544 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
545 {NULL}
546};
547
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700548static PyGetSetDef ast_type_getsets[] = {
549 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
550 {NULL}
551};
552
Neal Norwitz207c9f32008-03-31 04:42:11 +0000553static PyTypeObject AST_type = {
554 PyVarObject_HEAD_INIT(&PyType_Type, 0)
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000555 "_ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700556 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000557 0,
Benjamin Peterson1767e022012-03-14 21:50:29 -0500558 (destructor)ast_dealloc, /* tp_dealloc */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000559 0, /* tp_print */
560 0, /* tp_getattr */
561 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +0000562 0, /* tp_reserved */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000563 0, /* tp_repr */
564 0, /* tp_as_number */
565 0, /* tp_as_sequence */
566 0, /* tp_as_mapping */
567 0, /* tp_hash */
568 0, /* tp_call */
569 0, /* tp_str */
570 PyObject_GenericGetAttr, /* tp_getattro */
571 PyObject_GenericSetAttr, /* tp_setattro */
572 0, /* tp_as_buffer */
573 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
574 0, /* tp_doc */
575 0, /* tp_traverse */
576 0, /* tp_clear */
577 0, /* tp_richcompare */
578 0, /* tp_weaklistoffset */
579 0, /* tp_iter */
580 0, /* tp_iternext */
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000581 ast_type_methods, /* tp_methods */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000582 0, /* tp_members */
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700583 ast_type_getsets, /* tp_getset */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000584 0, /* tp_base */
585 0, /* tp_dict */
586 0, /* tp_descr_get */
587 0, /* tp_descr_set */
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700588 offsetof(AST_object, dict),/* tp_dictoffset */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000589 (initproc)ast_type_init, /* tp_init */
590 PyType_GenericAlloc, /* tp_alloc */
591 PyType_GenericNew, /* tp_new */
592 PyObject_Del, /* tp_free */
593};
594
595
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000596static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
597{
598 PyObject *fnames, *result;
599 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000600 fnames = PyTuple_New(num_fields);
601 if (!fnames) return NULL;
602 for (i = 0; i < num_fields; i++) {
Neal Norwitze4dc3242007-08-25 01:33:49 +0000603 PyObject *field = PyUnicode_FromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000604 if (!field) {
605 Py_DECREF(fnames);
606 return NULL;
607 }
608 PyTuple_SET_ITEM(fnames, i, field);
609 }
Victor Stinner7eeb5b52010-06-07 19:57:46 +0000610 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000611 type, base, "_fields", fnames, "__module__", "_ast");
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000612 Py_DECREF(fnames);
613 return (PyTypeObject*)result;
614}
615
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000616static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
617{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000618 int i, result;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200619 _Py_IDENTIFIER(_attributes);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000620 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000621 if (!l)
622 return 0;
623 for (i = 0; i < num_fields; i++) {
Neal Norwitze4dc3242007-08-25 01:33:49 +0000624 s = PyUnicode_FromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000625 if (!s) {
626 Py_DECREF(l);
627 return 0;
628 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000629 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000630 }
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200631 result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000632 Py_DECREF(l);
633 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000634}
635
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000636/* Conversion AST -> Python */
637
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000638static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
639{
Benjamin Peterson77fa9372012-05-15 10:10:27 -0700640 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000641 PyObject *result = PyList_New(n);
642 PyObject *value;
643 if (!result)
644 return NULL;
645 for (i = 0; i < n; i++) {
646 value = func(asdl_seq_GET(seq, i));
647 if (!value) {
648 Py_DECREF(result);
649 return NULL;
650 }
651 PyList_SET_ITEM(result, i, value);
652 }
653 return result;
654}
655
656static PyObject* ast2obj_object(void *o)
657{
658 if (!o)
659 o = Py_None;
660 Py_INCREF((PyObject*)o);
661 return (PyObject*)o;
662}
663#define ast2obj_identifier ast2obj_object
664#define ast2obj_string ast2obj_object
Benjamin Petersone2498412011-08-09 16:08:39 -0500665#define ast2obj_bytes ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000666
Thomas Woutersa44f3a32007-02-26 18:20:15 +0000667static PyObject* ast2obj_int(long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000668{
Christian Heimes217cfd12007-12-02 14:31:20 +0000669 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000670}
671
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000672/* Conversion Python -> AST */
673
674static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
675{
676 if (obj == Py_None)
677 obj = NULL;
678 if (obj)
679 PyArena_AddPyObject(arena, obj);
680 Py_XINCREF(obj);
681 *out = obj;
682 return 0;
683}
684
Benjamin Peterson180e6352011-07-22 11:09:07 -0500685static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500686{
Benjamin Peterson180e6352011-07-22 11:09:07 -0500687 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
688 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500689 return 1;
690 }
691 return obj2ast_object(obj, out, arena);
692}
693
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500694static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
695{
Benjamin Peterson0224d4e2011-08-31 22:13:03 -0400696 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
Benjamin Peterson180e6352011-07-22 11:09:07 -0500697 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
698 return 1;
699 }
700 return obj2ast_object(obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500701}
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000702
Benjamin Petersone2498412011-08-09 16:08:39 -0500703static int obj2ast_bytes(PyObject* obj, PyObject** out, PyArena* arena)
704{
705 if (!PyBytes_CheckExact(obj)) {
706 PyErr_SetString(PyExc_TypeError, "AST bytes must be of type bytes");
707 return 1;
708 }
709 return obj2ast_object(obj, out, arena);
710}
711
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000712static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
713{
714 int i;
715 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +0100716 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000717 return 1;
718 }
719
720 i = (int)PyLong_AsLong(obj);
721 if (i == -1 && PyErr_Occurred())
722 return 1;
723 *out = i;
724 return 0;
725}
726
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +0000727static int add_ast_fields(void)
Benjamin Petersonce825f12008-10-24 23:11:02 +0000728{
729 PyObject *empty_tuple, *d;
730 if (PyType_Ready(&AST_type) < 0)
731 return -1;
732 d = AST_type.tp_dict;
733 empty_tuple = PyTuple_New(0);
734 if (!empty_tuple ||
735 PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
736 PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
737 Py_XDECREF(empty_tuple);
738 return -1;
739 }
740 Py_DECREF(empty_tuple);
741 return 0;
742}
743
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000744
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000745static int init_types(void)
746{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000747 static int initialized;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000748 if (initialized) return 1;
Benjamin Petersonce825f12008-10-24 23:11:02 +0000749 if (add_ast_fields() < 0) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000750 mod_type = make_type("mod", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000751 if (!mod_type) return 0;
752 if (!add_attributes(mod_type, NULL, 0)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000753 Module_type = make_type("Module", mod_type, Module_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000754 if (!Module_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000755 Interactive_type = make_type("Interactive", mod_type,
756 Interactive_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000757 if (!Interactive_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000758 Expression_type = make_type("Expression", mod_type, Expression_fields,
759 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000760 if (!Expression_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000761 Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000762 if (!Suite_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000763 stmt_type = make_type("stmt", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000764 if (!stmt_type) return 0;
Martin v. Löwis49c5da12006-03-01 22:49:05 +0000765 if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000766 FunctionDef_type = make_type("FunctionDef", stmt_type,
Neal Norwitzc1505362006-12-28 06:47:50 +0000767 FunctionDef_fields, 5);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000768 if (!FunctionDef_type) return 0;
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000769 ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 7);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000770 if (!ClassDef_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000771 Return_type = make_type("Return", stmt_type, Return_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000772 if (!Return_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000773 Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000774 if (!Delete_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000775 Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000776 if (!Assign_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000777 AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000778 if (!AugAssign_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000779 For_type = make_type("For", stmt_type, For_fields, 4);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000780 if (!For_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000781 While_type = make_type("While", stmt_type, While_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000782 if (!While_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000783 If_type = make_type("If", stmt_type, If_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000784 if (!If_type) return 0;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500785 With_type = make_type("With", stmt_type, With_fields, 2);
Guido van Rossumc2e20742006-02-27 22:32:47 +0000786 if (!With_type) return 0;
Collin Winter828f04a2007-08-31 00:04:24 +0000787 Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000788 if (!Raise_type) return 0;
Benjamin Peterson43af12b2011-05-29 11:43:10 -0500789 Try_type = make_type("Try", stmt_type, Try_fields, 4);
790 if (!Try_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000791 Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000792 if (!Assert_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000793 Import_type = make_type("Import", stmt_type, Import_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000794 if (!Import_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000795 ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields,
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000796 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000797 if (!ImportFrom_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000798 Global_type = make_type("Global", stmt_type, Global_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000799 if (!Global_type) return 0;
Jeremy Hylton81e95022007-02-27 06:50:52 +0000800 Nonlocal_type = make_type("Nonlocal", stmt_type, Nonlocal_fields, 1);
801 if (!Nonlocal_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000802 Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000803 if (!Expr_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000804 Pass_type = make_type("Pass", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000805 if (!Pass_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000806 Break_type = make_type("Break", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000807 if (!Break_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000808 Continue_type = make_type("Continue", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000809 if (!Continue_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000810 expr_type = make_type("expr", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000811 if (!expr_type) return 0;
Martin v. Löwis49c5da12006-03-01 22:49:05 +0000812 if (!add_attributes(expr_type, expr_attributes, 2)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000813 BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000814 if (!BoolOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000815 BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000816 if (!BinOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000817 UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000818 if (!UnaryOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000819 Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000820 if (!Lambda_type) return 0;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000821 IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000822 if (!IfExp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000823 Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000824 if (!Dict_type) return 0;
Guido van Rossum86e58e22006-08-28 15:27:34 +0000825 Set_type = make_type("Set", expr_type, Set_fields, 1);
826 if (!Set_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000827 ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000828 if (!ListComp_type) return 0;
Nick Coghlan650f0d02007-04-15 12:05:43 +0000829 SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
830 if (!SetComp_type) return 0;
Guido van Rossum992d4a32007-07-11 13:09:30 +0000831 DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
832 if (!DictComp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000833 GeneratorExp_type = make_type("GeneratorExp", expr_type,
834 GeneratorExp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000835 if (!GeneratorExp_type) return 0;
Benjamin Peterson527c6222012-01-14 08:58:23 -0500836 Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000837 if (!Yield_type) return 0;
Benjamin Peterson527c6222012-01-14 08:58:23 -0500838 YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
839 if (!YieldFrom_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000840 Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000841 if (!Compare_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000842 Call_type = make_type("Call", expr_type, Call_fields, 5);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000843 if (!Call_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000844 Num_type = make_type("Num", expr_type, Num_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000845 if (!Num_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000846 Str_type = make_type("Str", expr_type, Str_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000847 if (!Str_type) return 0;
Thomas Wouters00e41de2007-02-23 19:56:57 +0000848 Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1);
849 if (!Bytes_type) return 0;
Georg Brandl52318d62006-09-06 07:06:08 +0000850 Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0);
851 if (!Ellipsis_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000852 Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000853 if (!Attribute_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000854 Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000855 if (!Subscript_type) return 0;
Guido van Rossum0368b722007-05-11 16:50:42 +0000856 Starred_type = make_type("Starred", expr_type, Starred_fields, 2);
857 if (!Starred_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000858 Name_type = make_type("Name", expr_type, Name_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000859 if (!Name_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000860 List_type = make_type("List", expr_type, List_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000861 if (!List_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000862 Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000863 if (!Tuple_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000864 expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000865 if (!expr_context_type) return 0;
866 if (!add_attributes(expr_context_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000867 Load_type = make_type("Load", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000868 if (!Load_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000869 Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000870 if (!Load_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000871 Store_type = make_type("Store", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000872 if (!Store_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000873 Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000874 if (!Store_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000875 Del_type = make_type("Del", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000876 if (!Del_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000877 Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000878 if (!Del_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000879 AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000880 if (!AugLoad_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000881 AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000882 if (!AugLoad_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000883 AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000884 if (!AugStore_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000885 AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000886 if (!AugStore_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000887 Param_type = make_type("Param", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000888 if (!Param_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000889 Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000890 if (!Param_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000891 slice_type = make_type("slice", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000892 if (!slice_type) return 0;
893 if (!add_attributes(slice_type, NULL, 0)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000894 Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000895 if (!Slice_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000896 ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000897 if (!ExtSlice_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000898 Index_type = make_type("Index", slice_type, Index_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000899 if (!Index_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000900 boolop_type = make_type("boolop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000901 if (!boolop_type) return 0;
902 if (!add_attributes(boolop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000903 And_type = make_type("And", boolop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000904 if (!And_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000905 And_singleton = PyType_GenericNew(And_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000906 if (!And_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000907 Or_type = make_type("Or", boolop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000908 if (!Or_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000909 Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000910 if (!Or_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000911 operator_type = make_type("operator", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000912 if (!operator_type) return 0;
913 if (!add_attributes(operator_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000914 Add_type = make_type("Add", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000915 if (!Add_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000916 Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000917 if (!Add_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000918 Sub_type = make_type("Sub", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000919 if (!Sub_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000920 Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000921 if (!Sub_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000922 Mult_type = make_type("Mult", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000923 if (!Mult_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000924 Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000925 if (!Mult_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000926 Div_type = make_type("Div", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000927 if (!Div_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000928 Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000929 if (!Div_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000930 Mod_type = make_type("Mod", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000931 if (!Mod_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000932 Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000933 if (!Mod_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000934 Pow_type = make_type("Pow", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000935 if (!Pow_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000936 Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000937 if (!Pow_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000938 LShift_type = make_type("LShift", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000939 if (!LShift_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000940 LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000941 if (!LShift_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000942 RShift_type = make_type("RShift", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000943 if (!RShift_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000944 RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000945 if (!RShift_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000946 BitOr_type = make_type("BitOr", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000947 if (!BitOr_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000948 BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000949 if (!BitOr_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000950 BitXor_type = make_type("BitXor", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000951 if (!BitXor_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000952 BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000953 if (!BitXor_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000954 BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000955 if (!BitAnd_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000956 BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000957 if (!BitAnd_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000958 FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000959 if (!FloorDiv_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000960 FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000961 if (!FloorDiv_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000962 unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000963 if (!unaryop_type) return 0;
964 if (!add_attributes(unaryop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000965 Invert_type = make_type("Invert", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000966 if (!Invert_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000967 Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000968 if (!Invert_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000969 Not_type = make_type("Not", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000970 if (!Not_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000971 Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000972 if (!Not_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000973 UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000974 if (!UAdd_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000975 UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000976 if (!UAdd_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000977 USub_type = make_type("USub", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000978 if (!USub_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000979 USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000980 if (!USub_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000981 cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000982 if (!cmpop_type) return 0;
983 if (!add_attributes(cmpop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000984 Eq_type = make_type("Eq", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000985 if (!Eq_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000986 Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000987 if (!Eq_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000988 NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000989 if (!NotEq_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000990 NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000991 if (!NotEq_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000992 Lt_type = make_type("Lt", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000993 if (!Lt_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000994 Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000995 if (!Lt_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000996 LtE_type = make_type("LtE", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000997 if (!LtE_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000998 LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000999 if (!LtE_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001000 Gt_type = make_type("Gt", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001001 if (!Gt_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001002 Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001003 if (!Gt_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001004 GtE_type = make_type("GtE", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001005 if (!GtE_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001006 GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001007 if (!GtE_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001008 Is_type = make_type("Is", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001009 if (!Is_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001010 Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001011 if (!Is_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001012 IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001013 if (!IsNot_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001014 IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001015 if (!IsNot_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001016 In_type = make_type("In", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001017 if (!In_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001018 In_singleton = PyType_GenericNew(In_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001019 if (!In_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001020 NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001021 if (!NotIn_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001022 NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001023 if (!NotIn_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001024 comprehension_type = make_type("comprehension", &AST_type,
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001025 comprehension_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001026 if (!comprehension_type) return 0;
Neal Norwitzad74aa82008-03-31 05:14:30 +00001027 excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001028 if (!excepthandler_type) return 0;
Neal Norwitzad74aa82008-03-31 05:14:30 +00001029 if (!add_attributes(excepthandler_type, excepthandler_attributes, 2))
1030 return 0;
1031 ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
1032 ExceptHandler_fields, 3);
1033 if (!ExceptHandler_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001034 arguments_type = make_type("arguments", &AST_type, arguments_fields, 8);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001035 if (!arguments_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001036 arg_type = make_type("arg", &AST_type, arg_fields, 2);
Neal Norwitzc1505362006-12-28 06:47:50 +00001037 if (!arg_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001038 keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001039 if (!keyword_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001040 alias_type = make_type("alias", &AST_type, alias_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001041 if (!alias_type) return 0;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001042 withitem_type = make_type("withitem", &AST_type, withitem_fields, 2);
1043 if (!withitem_type) return 0;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001044 initialized = 1;
1045 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001046}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001047
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001048static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
1049static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
1050static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
1051static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
1052 arena);
1053static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
1054static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
1055static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
1056static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
1057static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
1058static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
1059 arena);
1060static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
1061 arena);
1062static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
1063static int obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena);
1064static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
1065static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001066static int obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001067
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001068mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001069Module(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001070{
1071 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001072 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001073 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001074 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001075 p->kind = Module_kind;
1076 p->v.Module.body = body;
1077 return p;
1078}
1079
1080mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001081Interactive(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001082{
1083 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001084 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001085 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001086 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001087 p->kind = Interactive_kind;
1088 p->v.Interactive.body = body;
1089 return p;
1090}
1091
1092mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001093Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001094{
1095 mod_ty p;
1096 if (!body) {
1097 PyErr_SetString(PyExc_ValueError,
1098 "field body is required for Expression");
1099 return NULL;
1100 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001101 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001102 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001103 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001104 p->kind = Expression_kind;
1105 p->v.Expression.body = body;
1106 return p;
1107}
1108
1109mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001110Suite(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001111{
1112 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001113 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001114 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001115 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001116 p->kind = Suite_kind;
1117 p->v.Suite.body = body;
1118 return p;
1119}
1120
1121stmt_ty
1122FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001123 decorator_list, expr_ty returns, int lineno, int col_offset,
1124 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001125{
1126 stmt_ty p;
1127 if (!name) {
1128 PyErr_SetString(PyExc_ValueError,
1129 "field name is required for FunctionDef");
1130 return NULL;
1131 }
1132 if (!args) {
1133 PyErr_SetString(PyExc_ValueError,
1134 "field args is required for FunctionDef");
1135 return NULL;
1136 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001137 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001138 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001139 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001140 p->kind = FunctionDef_kind;
1141 p->v.FunctionDef.name = name;
1142 p->v.FunctionDef.args = args;
1143 p->v.FunctionDef.body = body;
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001144 p->v.FunctionDef.decorator_list = decorator_list;
Neal Norwitzc1505362006-12-28 06:47:50 +00001145 p->v.FunctionDef.returns = returns;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001146 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001147 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001148 return p;
1149}
1150
1151stmt_ty
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001152ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, expr_ty
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001153 starargs, expr_ty kwargs, asdl_seq * body, asdl_seq * decorator_list,
1154 int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001155{
1156 stmt_ty p;
1157 if (!name) {
1158 PyErr_SetString(PyExc_ValueError,
1159 "field name is required for ClassDef");
1160 return NULL;
1161 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001162 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001163 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001164 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001165 p->kind = ClassDef_kind;
1166 p->v.ClassDef.name = name;
1167 p->v.ClassDef.bases = bases;
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001168 p->v.ClassDef.keywords = keywords;
1169 p->v.ClassDef.starargs = starargs;
1170 p->v.ClassDef.kwargs = kwargs;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001171 p->v.ClassDef.body = body;
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001172 p->v.ClassDef.decorator_list = decorator_list;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001173 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001174 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001175 return p;
1176}
1177
1178stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001179Return(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001180{
1181 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001182 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001183 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001184 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001185 p->kind = Return_kind;
1186 p->v.Return.value = value;
1187 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001188 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001189 return p;
1190}
1191
1192stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001193Delete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001194{
1195 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001196 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001197 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001198 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001199 p->kind = Delete_kind;
1200 p->v.Delete.targets = targets;
1201 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001202 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001203 return p;
1204}
1205
1206stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001207Assign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena
1208 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001209{
1210 stmt_ty p;
1211 if (!value) {
1212 PyErr_SetString(PyExc_ValueError,
1213 "field value is required for Assign");
1214 return NULL;
1215 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001216 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001217 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001218 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001219 p->kind = Assign_kind;
1220 p->v.Assign.targets = targets;
1221 p->v.Assign.value = value;
1222 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001223 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001224 return p;
1225}
1226
1227stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001228AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
1229 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001230{
1231 stmt_ty p;
1232 if (!target) {
1233 PyErr_SetString(PyExc_ValueError,
1234 "field target is required for AugAssign");
1235 return NULL;
1236 }
1237 if (!op) {
1238 PyErr_SetString(PyExc_ValueError,
1239 "field op is required for AugAssign");
1240 return NULL;
1241 }
1242 if (!value) {
1243 PyErr_SetString(PyExc_ValueError,
1244 "field value is required for AugAssign");
1245 return NULL;
1246 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001247 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001248 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001249 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001250 p->kind = AugAssign_kind;
1251 p->v.AugAssign.target = target;
1252 p->v.AugAssign.op = op;
1253 p->v.AugAssign.value = value;
1254 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001255 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001256 return p;
1257}
1258
1259stmt_ty
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001260For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001261 lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001262{
1263 stmt_ty p;
1264 if (!target) {
1265 PyErr_SetString(PyExc_ValueError,
1266 "field target is required for For");
1267 return NULL;
1268 }
1269 if (!iter) {
1270 PyErr_SetString(PyExc_ValueError,
1271 "field iter is required for For");
1272 return NULL;
1273 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001274 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001275 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001276 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001277 p->kind = For_kind;
1278 p->v.For.target = target;
1279 p->v.For.iter = iter;
1280 p->v.For.body = body;
1281 p->v.For.orelse = orelse;
1282 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001283 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001284 return p;
1285}
1286
1287stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001288While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1289 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001290{
1291 stmt_ty p;
1292 if (!test) {
1293 PyErr_SetString(PyExc_ValueError,
1294 "field test is required for While");
1295 return NULL;
1296 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001297 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001298 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001299 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001300 p->kind = While_kind;
1301 p->v.While.test = test;
1302 p->v.While.body = body;
1303 p->v.While.orelse = orelse;
1304 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001305 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001306 return p;
1307}
1308
1309stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001310If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1311 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001312{
1313 stmt_ty p;
1314 if (!test) {
1315 PyErr_SetString(PyExc_ValueError,
1316 "field test is required for If");
1317 return NULL;
1318 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001319 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001320 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001321 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001322 p->kind = If_kind;
1323 p->v.If.test = test;
1324 p->v.If.body = body;
1325 p->v.If.orelse = orelse;
1326 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001327 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001328 return p;
1329}
1330
1331stmt_ty
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001332With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset, PyArena
1333 *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001334{
1335 stmt_ty p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001336 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001337 if (!p)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001338 return NULL;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001339 p->kind = With_kind;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001340 p->v.With.items = items;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001341 p->v.With.body = body;
1342 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001343 p->col_offset = col_offset;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001344 return p;
1345}
1346
1347stmt_ty
Collin Winter828f04a2007-08-31 00:04:24 +00001348Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001349{
1350 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001351 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001352 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001353 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001354 p->kind = Raise_kind;
Collin Winter828f04a2007-08-31 00:04:24 +00001355 p->v.Raise.exc = exc;
1356 p->v.Raise.cause = cause;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001357 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001358 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001359 return p;
1360}
1361
1362stmt_ty
Benjamin Peterson43af12b2011-05-29 11:43:10 -05001363Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, asdl_seq *
1364 finalbody, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001365{
1366 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001367 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001368 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001369 return NULL;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05001370 p->kind = Try_kind;
1371 p->v.Try.body = body;
1372 p->v.Try.handlers = handlers;
1373 p->v.Try.orelse = orelse;
1374 p->v.Try.finalbody = finalbody;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001375 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001376 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001377 return p;
1378}
1379
1380stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001381Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001382{
1383 stmt_ty p;
1384 if (!test) {
1385 PyErr_SetString(PyExc_ValueError,
1386 "field test is required for Assert");
1387 return NULL;
1388 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001389 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001390 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001391 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001392 p->kind = Assert_kind;
1393 p->v.Assert.test = test;
1394 p->v.Assert.msg = msg;
1395 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001396 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001397 return p;
1398}
1399
1400stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001401Import(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001402{
1403 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001404 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001405 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001406 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001407 p->kind = Import_kind;
1408 p->v.Import.names = names;
1409 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001410 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001411 return p;
1412}
1413
1414stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001415ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
1416 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001417{
1418 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001419 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001420 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001421 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001422 p->kind = ImportFrom_kind;
1423 p->v.ImportFrom.module = module;
1424 p->v.ImportFrom.names = names;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001425 p->v.ImportFrom.level = level;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001426 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001427 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001428 return p;
1429}
1430
1431stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001432Global(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001433{
1434 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001435 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001436 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001437 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001438 p->kind = Global_kind;
1439 p->v.Global.names = names;
1440 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001441 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001442 return p;
1443}
1444
1445stmt_ty
Jeremy Hylton81e95022007-02-27 06:50:52 +00001446Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
1447{
1448 stmt_ty p;
1449 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1450 if (!p)
1451 return NULL;
1452 p->kind = Nonlocal_kind;
1453 p->v.Nonlocal.names = names;
1454 p->lineno = lineno;
1455 p->col_offset = col_offset;
1456 return p;
1457}
1458
1459stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001460Expr(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001461{
1462 stmt_ty p;
1463 if (!value) {
1464 PyErr_SetString(PyExc_ValueError,
1465 "field value is required for Expr");
1466 return NULL;
1467 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001468 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001469 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001470 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001471 p->kind = Expr_kind;
1472 p->v.Expr.value = value;
1473 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001474 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001475 return p;
1476}
1477
1478stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001479Pass(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001480{
1481 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001482 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001483 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001484 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001485 p->kind = Pass_kind;
1486 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001487 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001488 return p;
1489}
1490
1491stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001492Break(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001493{
1494 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001495 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001496 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001497 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001498 p->kind = Break_kind;
1499 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001500 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001501 return p;
1502}
1503
1504stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001505Continue(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001506{
1507 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001508 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001509 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001510 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001511 p->kind = Continue_kind;
1512 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001513 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001514 return p;
1515}
1516
1517expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001518BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena
1519 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001520{
1521 expr_ty p;
1522 if (!op) {
1523 PyErr_SetString(PyExc_ValueError,
1524 "field op is required for BoolOp");
1525 return NULL;
1526 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001527 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001528 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001529 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001530 p->kind = BoolOp_kind;
1531 p->v.BoolOp.op = op;
1532 p->v.BoolOp.values = values;
1533 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001534 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001535 return p;
1536}
1537
1538expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001539BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
1540 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001541{
1542 expr_ty p;
1543 if (!left) {
1544 PyErr_SetString(PyExc_ValueError,
1545 "field left is required for BinOp");
1546 return NULL;
1547 }
1548 if (!op) {
1549 PyErr_SetString(PyExc_ValueError,
1550 "field op is required for BinOp");
1551 return NULL;
1552 }
1553 if (!right) {
1554 PyErr_SetString(PyExc_ValueError,
1555 "field right is required for BinOp");
1556 return NULL;
1557 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001558 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001559 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001560 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001561 p->kind = BinOp_kind;
1562 p->v.BinOp.left = left;
1563 p->v.BinOp.op = op;
1564 p->v.BinOp.right = right;
1565 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001566 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001567 return p;
1568}
1569
1570expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001571UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena
1572 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001573{
1574 expr_ty p;
1575 if (!op) {
1576 PyErr_SetString(PyExc_ValueError,
1577 "field op is required for UnaryOp");
1578 return NULL;
1579 }
1580 if (!operand) {
1581 PyErr_SetString(PyExc_ValueError,
1582 "field operand is required for UnaryOp");
1583 return NULL;
1584 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001585 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001586 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001587 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001588 p->kind = UnaryOp_kind;
1589 p->v.UnaryOp.op = op;
1590 p->v.UnaryOp.operand = operand;
1591 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001592 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001593 return p;
1594}
1595
1596expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001597Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena
1598 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001599{
1600 expr_ty p;
1601 if (!args) {
1602 PyErr_SetString(PyExc_ValueError,
1603 "field args is required for Lambda");
1604 return NULL;
1605 }
1606 if (!body) {
1607 PyErr_SetString(PyExc_ValueError,
1608 "field body is required for Lambda");
1609 return NULL;
1610 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001611 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001612 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001613 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001614 p->kind = Lambda_kind;
1615 p->v.Lambda.args = args;
1616 p->v.Lambda.body = body;
1617 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001618 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001619 return p;
1620}
1621
1622expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001623IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
1624 PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001625{
1626 expr_ty p;
1627 if (!test) {
1628 PyErr_SetString(PyExc_ValueError,
1629 "field test is required for IfExp");
1630 return NULL;
1631 }
1632 if (!body) {
1633 PyErr_SetString(PyExc_ValueError,
1634 "field body is required for IfExp");
1635 return NULL;
1636 }
1637 if (!orelse) {
1638 PyErr_SetString(PyExc_ValueError,
1639 "field orelse is required for IfExp");
1640 return NULL;
1641 }
1642 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001643 if (!p)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001644 return NULL;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001645 p->kind = IfExp_kind;
1646 p->v.IfExp.test = test;
1647 p->v.IfExp.body = body;
1648 p->v.IfExp.orelse = orelse;
1649 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001650 p->col_offset = col_offset;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001651 return p;
1652}
1653
1654expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001655Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena
1656 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001657{
1658 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001659 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001660 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001661 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001662 p->kind = Dict_kind;
1663 p->v.Dict.keys = keys;
1664 p->v.Dict.values = values;
1665 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001666 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001667 return p;
1668}
1669
1670expr_ty
Guido van Rossum86e58e22006-08-28 15:27:34 +00001671Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena)
1672{
1673 expr_ty p;
1674 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001675 if (!p)
Guido van Rossum86e58e22006-08-28 15:27:34 +00001676 return NULL;
Guido van Rossum86e58e22006-08-28 15:27:34 +00001677 p->kind = Set_kind;
1678 p->v.Set.elts = elts;
1679 p->lineno = lineno;
1680 p->col_offset = col_offset;
1681 return p;
1682}
1683
1684expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001685ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1686 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001687{
1688 expr_ty p;
1689 if (!elt) {
1690 PyErr_SetString(PyExc_ValueError,
1691 "field elt is required for ListComp");
1692 return NULL;
1693 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001694 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001695 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001696 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001697 p->kind = ListComp_kind;
1698 p->v.ListComp.elt = elt;
1699 p->v.ListComp.generators = generators;
1700 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001701 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001702 return p;
1703}
1704
1705expr_ty
Nick Coghlan650f0d02007-04-15 12:05:43 +00001706SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena
1707 *arena)
1708{
1709 expr_ty p;
1710 if (!elt) {
1711 PyErr_SetString(PyExc_ValueError,
1712 "field elt is required for SetComp");
1713 return NULL;
1714 }
1715 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1716 if (!p)
1717 return NULL;
1718 p->kind = SetComp_kind;
1719 p->v.SetComp.elt = elt;
1720 p->v.SetComp.generators = generators;
1721 p->lineno = lineno;
1722 p->col_offset = col_offset;
1723 return p;
1724}
1725
1726expr_ty
Guido van Rossum992d4a32007-07-11 13:09:30 +00001727DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
1728 col_offset, PyArena *arena)
1729{
1730 expr_ty p;
1731 if (!key) {
1732 PyErr_SetString(PyExc_ValueError,
1733 "field key is required for DictComp");
1734 return NULL;
1735 }
1736 if (!value) {
1737 PyErr_SetString(PyExc_ValueError,
1738 "field value is required for DictComp");
1739 return NULL;
1740 }
1741 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1742 if (!p)
1743 return NULL;
1744 p->kind = DictComp_kind;
1745 p->v.DictComp.key = key;
1746 p->v.DictComp.value = value;
1747 p->v.DictComp.generators = generators;
1748 p->lineno = lineno;
1749 p->col_offset = col_offset;
1750 return p;
1751}
1752
1753expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001754GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1755 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001756{
1757 expr_ty p;
1758 if (!elt) {
1759 PyErr_SetString(PyExc_ValueError,
1760 "field elt is required for GeneratorExp");
1761 return NULL;
1762 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001763 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001764 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001765 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001766 p->kind = GeneratorExp_kind;
1767 p->v.GeneratorExp.elt = elt;
1768 p->v.GeneratorExp.generators = generators;
1769 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001770 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001771 return p;
1772}
1773
1774expr_ty
Benjamin Peterson527c6222012-01-14 08:58:23 -05001775Yield(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001776{
1777 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001778 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001779 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001780 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001781 p->kind = Yield_kind;
1782 p->v.Yield.value = value;
1783 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001784 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001785 return p;
1786}
1787
1788expr_ty
Benjamin Peterson527c6222012-01-14 08:58:23 -05001789YieldFrom(expr_ty value, int lineno, int col_offset, PyArena *arena)
1790{
1791 expr_ty p;
1792 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1793 if (!p)
1794 return NULL;
1795 p->kind = YieldFrom_kind;
1796 p->v.YieldFrom.value = value;
1797 p->lineno = lineno;
1798 p->col_offset = col_offset;
1799 return p;
1800}
1801
1802expr_ty
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001803Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
1804 int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001805{
1806 expr_ty p;
1807 if (!left) {
1808 PyErr_SetString(PyExc_ValueError,
1809 "field left is required for Compare");
1810 return NULL;
1811 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001812 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001813 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001814 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001815 p->kind = Compare_kind;
1816 p->v.Compare.left = left;
1817 p->v.Compare.ops = ops;
1818 p->v.Compare.comparators = comparators;
1819 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001820 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001821 return p;
1822}
1823
1824expr_ty
1825Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001826 expr_ty kwargs, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001827{
1828 expr_ty p;
1829 if (!func) {
1830 PyErr_SetString(PyExc_ValueError,
1831 "field func is required for Call");
1832 return NULL;
1833 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001834 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001835 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001836 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001837 p->kind = Call_kind;
1838 p->v.Call.func = func;
1839 p->v.Call.args = args;
1840 p->v.Call.keywords = keywords;
1841 p->v.Call.starargs = starargs;
1842 p->v.Call.kwargs = kwargs;
1843 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001844 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001845 return p;
1846}
1847
1848expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001849Num(object n, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001850{
1851 expr_ty p;
1852 if (!n) {
1853 PyErr_SetString(PyExc_ValueError,
1854 "field n is required for Num");
1855 return NULL;
1856 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001857 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001858 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001859 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001860 p->kind = Num_kind;
1861 p->v.Num.n = n;
1862 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001863 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001864 return p;
1865}
1866
1867expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001868Str(string s, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001869{
1870 expr_ty p;
1871 if (!s) {
1872 PyErr_SetString(PyExc_ValueError,
1873 "field s is required for Str");
1874 return NULL;
1875 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001876 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001877 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001878 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001879 p->kind = Str_kind;
1880 p->v.Str.s = s;
1881 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001882 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001883 return p;
1884}
1885
1886expr_ty
Benjamin Petersone2498412011-08-09 16:08:39 -05001887Bytes(bytes s, int lineno, int col_offset, PyArena *arena)
Thomas Wouters00e41de2007-02-23 19:56:57 +00001888{
1889 expr_ty p;
1890 if (!s) {
1891 PyErr_SetString(PyExc_ValueError,
1892 "field s is required for Bytes");
1893 return NULL;
1894 }
1895 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001896 if (!p)
Thomas Wouters00e41de2007-02-23 19:56:57 +00001897 return NULL;
Thomas Wouters00e41de2007-02-23 19:56:57 +00001898 p->kind = Bytes_kind;
1899 p->v.Bytes.s = s;
1900 p->lineno = lineno;
1901 p->col_offset = col_offset;
1902 return p;
1903}
1904
1905expr_ty
Georg Brandl52318d62006-09-06 07:06:08 +00001906Ellipsis(int lineno, int col_offset, PyArena *arena)
1907{
1908 expr_ty p;
1909 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001910 if (!p)
Georg Brandl52318d62006-09-06 07:06:08 +00001911 return NULL;
Georg Brandl52318d62006-09-06 07:06:08 +00001912 p->kind = Ellipsis_kind;
1913 p->lineno = lineno;
1914 p->col_offset = col_offset;
1915 return p;
1916}
1917
1918expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001919Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
1920 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001921{
1922 expr_ty p;
1923 if (!value) {
1924 PyErr_SetString(PyExc_ValueError,
1925 "field value is required for Attribute");
1926 return NULL;
1927 }
1928 if (!attr) {
1929 PyErr_SetString(PyExc_ValueError,
1930 "field attr is required for Attribute");
1931 return NULL;
1932 }
1933 if (!ctx) {
1934 PyErr_SetString(PyExc_ValueError,
1935 "field ctx is required for Attribute");
1936 return NULL;
1937 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001938 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001939 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001940 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001941 p->kind = Attribute_kind;
1942 p->v.Attribute.value = value;
1943 p->v.Attribute.attr = attr;
1944 p->v.Attribute.ctx = ctx;
1945 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001946 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001947 return p;
1948}
1949
1950expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001951Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
1952 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001953{
1954 expr_ty p;
1955 if (!value) {
1956 PyErr_SetString(PyExc_ValueError,
1957 "field value is required for Subscript");
1958 return NULL;
1959 }
1960 if (!slice) {
1961 PyErr_SetString(PyExc_ValueError,
1962 "field slice is required for Subscript");
1963 return NULL;
1964 }
1965 if (!ctx) {
1966 PyErr_SetString(PyExc_ValueError,
1967 "field ctx is required for Subscript");
1968 return NULL;
1969 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001970 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001971 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001972 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001973 p->kind = Subscript_kind;
1974 p->v.Subscript.value = value;
1975 p->v.Subscript.slice = slice;
1976 p->v.Subscript.ctx = ctx;
1977 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001978 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001979 return p;
1980}
1981
1982expr_ty
Guido van Rossum0368b722007-05-11 16:50:42 +00001983Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, PyArena
1984 *arena)
1985{
1986 expr_ty p;
1987 if (!value) {
1988 PyErr_SetString(PyExc_ValueError,
1989 "field value is required for Starred");
1990 return NULL;
1991 }
1992 if (!ctx) {
1993 PyErr_SetString(PyExc_ValueError,
1994 "field ctx is required for Starred");
1995 return NULL;
1996 }
1997 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1998 if (!p)
1999 return NULL;
2000 p->kind = Starred_kind;
2001 p->v.Starred.value = value;
2002 p->v.Starred.ctx = ctx;
2003 p->lineno = lineno;
2004 p->col_offset = col_offset;
2005 return p;
2006}
2007
2008expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002009Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena
2010 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002011{
2012 expr_ty p;
2013 if (!id) {
2014 PyErr_SetString(PyExc_ValueError,
2015 "field id is required for Name");
2016 return NULL;
2017 }
2018 if (!ctx) {
2019 PyErr_SetString(PyExc_ValueError,
2020 "field ctx is required for Name");
2021 return NULL;
2022 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002023 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002024 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002025 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002026 p->kind = Name_kind;
2027 p->v.Name.id = id;
2028 p->v.Name.ctx = ctx;
2029 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002030 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002031 return p;
2032}
2033
2034expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002035List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
2036 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002037{
2038 expr_ty p;
2039 if (!ctx) {
2040 PyErr_SetString(PyExc_ValueError,
2041 "field ctx is required for List");
2042 return NULL;
2043 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002044 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002045 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002046 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002047 p->kind = List_kind;
2048 p->v.List.elts = elts;
2049 p->v.List.ctx = ctx;
2050 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002051 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002052 return p;
2053}
2054
2055expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002056Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
2057 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002058{
2059 expr_ty p;
2060 if (!ctx) {
2061 PyErr_SetString(PyExc_ValueError,
2062 "field ctx is required for Tuple");
2063 return NULL;
2064 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002065 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002066 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002067 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002068 p->kind = Tuple_kind;
2069 p->v.Tuple.elts = elts;
2070 p->v.Tuple.ctx = ctx;
2071 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002072 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002073 return p;
2074}
2075
2076slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002077Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002078{
2079 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002080 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002081 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002082 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002083 p->kind = Slice_kind;
2084 p->v.Slice.lower = lower;
2085 p->v.Slice.upper = upper;
2086 p->v.Slice.step = step;
2087 return p;
2088}
2089
2090slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002091ExtSlice(asdl_seq * dims, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002092{
2093 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002094 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002095 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002096 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002097 p->kind = ExtSlice_kind;
2098 p->v.ExtSlice.dims = dims;
2099 return p;
2100}
2101
2102slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002103Index(expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002104{
2105 slice_ty p;
2106 if (!value) {
2107 PyErr_SetString(PyExc_ValueError,
2108 "field value is required for Index");
2109 return NULL;
2110 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002111 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002112 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002113 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002114 p->kind = Index_kind;
2115 p->v.Index.value = value;
2116 return p;
2117}
2118
2119comprehension_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002120comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002121{
2122 comprehension_ty p;
2123 if (!target) {
2124 PyErr_SetString(PyExc_ValueError,
2125 "field target is required for comprehension");
2126 return NULL;
2127 }
2128 if (!iter) {
2129 PyErr_SetString(PyExc_ValueError,
2130 "field iter is required for comprehension");
2131 return NULL;
2132 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002133 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002134 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002135 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002136 p->target = target;
2137 p->iter = iter;
2138 p->ifs = ifs;
2139 return p;
2140}
2141
2142excepthandler_ty
Neal Norwitzad74aa82008-03-31 05:14:30 +00002143ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002144 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002145{
2146 excepthandler_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002147 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002148 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002149 return NULL;
Neal Norwitzad74aa82008-03-31 05:14:30 +00002150 p->kind = ExceptHandler_kind;
2151 p->v.ExceptHandler.type = type;
2152 p->v.ExceptHandler.name = name;
2153 p->v.ExceptHandler.body = body;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002154 p->lineno = lineno;
2155 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002156 return p;
2157}
2158
2159arguments_ty
Neal Norwitzc1505362006-12-28 06:47:50 +00002160arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation,
2161 asdl_seq * kwonlyargs, identifier kwarg, expr_ty kwargannotation,
2162 asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002163{
2164 arguments_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002165 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002166 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002167 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002168 p->args = args;
2169 p->vararg = vararg;
Neal Norwitzc1505362006-12-28 06:47:50 +00002170 p->varargannotation = varargannotation;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002171 p->kwonlyargs = kwonlyargs;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002172 p->kwarg = kwarg;
Neal Norwitzc1505362006-12-28 06:47:50 +00002173 p->kwargannotation = kwargannotation;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002174 p->defaults = defaults;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002175 p->kw_defaults = kw_defaults;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002176 return p;
2177}
2178
Neal Norwitzc1505362006-12-28 06:47:50 +00002179arg_ty
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002180arg(identifier arg, expr_ty annotation, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00002181{
2182 arg_ty p;
2183 if (!arg) {
2184 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002185 "field arg is required for arg");
Neal Norwitzc1505362006-12-28 06:47:50 +00002186 return NULL;
2187 }
2188 p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002189 if (!p)
Neal Norwitzc1505362006-12-28 06:47:50 +00002190 return NULL;
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002191 p->arg = arg;
2192 p->annotation = annotation;
Neal Norwitzc1505362006-12-28 06:47:50 +00002193 return p;
2194}
2195
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002196keyword_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002197keyword(identifier arg, expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002198{
2199 keyword_ty p;
2200 if (!arg) {
2201 PyErr_SetString(PyExc_ValueError,
2202 "field arg is required for keyword");
2203 return NULL;
2204 }
2205 if (!value) {
2206 PyErr_SetString(PyExc_ValueError,
2207 "field value is required for keyword");
2208 return NULL;
2209 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002210 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002211 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002212 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002213 p->arg = arg;
2214 p->value = value;
2215 return p;
2216}
2217
2218alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002219alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002220{
2221 alias_ty p;
2222 if (!name) {
2223 PyErr_SetString(PyExc_ValueError,
2224 "field name is required for alias");
2225 return NULL;
2226 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002227 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002228 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002229 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002230 p->name = name;
2231 p->asname = asname;
2232 return p;
2233}
2234
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05002235withitem_ty
2236withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
2237{
2238 withitem_ty p;
2239 if (!context_expr) {
2240 PyErr_SetString(PyExc_ValueError,
2241 "field context_expr is required for withitem");
2242 return NULL;
2243 }
2244 p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
2245 if (!p)
2246 return NULL;
2247 p->context_expr = context_expr;
2248 p->optional_vars = optional_vars;
2249 return p;
2250}
2251
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002252
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002253PyObject*
2254ast2obj_mod(void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002255{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002256 mod_ty o = (mod_ty)_o;
2257 PyObject *result = NULL, *value = NULL;
2258 if (!o) {
2259 Py_INCREF(Py_None);
2260 return Py_None;
2261 }
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002262
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002263 switch (o->kind) {
2264 case Module_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002265 result = PyType_GenericNew(Module_type, NULL, NULL);
2266 if (!result) goto failed;
2267 value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
2268 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002269 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002270 goto failed;
2271 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002272 break;
2273 case Interactive_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002274 result = PyType_GenericNew(Interactive_type, NULL, NULL);
2275 if (!result) goto failed;
2276 value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
2277 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002278 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002279 goto failed;
2280 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002281 break;
2282 case Expression_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002283 result = PyType_GenericNew(Expression_type, NULL, NULL);
2284 if (!result) goto failed;
2285 value = ast2obj_expr(o->v.Expression.body);
2286 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002287 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002288 goto failed;
2289 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002290 break;
2291 case Suite_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002292 result = PyType_GenericNew(Suite_type, NULL, NULL);
2293 if (!result) goto failed;
2294 value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
2295 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002296 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002297 goto failed;
2298 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002299 break;
2300 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002301 return result;
2302failed:
2303 Py_XDECREF(value);
2304 Py_XDECREF(result);
2305 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002306}
2307
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002308PyObject*
2309ast2obj_stmt(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002310{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002311 stmt_ty o = (stmt_ty)_o;
2312 PyObject *result = NULL, *value = NULL;
2313 if (!o) {
2314 Py_INCREF(Py_None);
2315 return Py_None;
2316 }
2317
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002318 switch (o->kind) {
2319 case FunctionDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002320 result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
2321 if (!result) goto failed;
2322 value = ast2obj_identifier(o->v.FunctionDef.name);
2323 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002324 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002325 goto failed;
2326 Py_DECREF(value);
2327 value = ast2obj_arguments(o->v.FunctionDef.args);
2328 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002329 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002330 goto failed;
2331 Py_DECREF(value);
2332 value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
2333 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002334 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002335 goto failed;
2336 Py_DECREF(value);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002337 value = ast2obj_list(o->v.FunctionDef.decorator_list,
2338 ast2obj_expr);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002339 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002340 if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) ==
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002341 -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002342 goto failed;
2343 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00002344 value = ast2obj_expr(o->v.FunctionDef.returns);
2345 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002346 if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00002347 goto failed;
2348 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002349 break;
2350 case ClassDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002351 result = PyType_GenericNew(ClassDef_type, NULL, NULL);
2352 if (!result) goto failed;
2353 value = ast2obj_identifier(o->v.ClassDef.name);
2354 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002355 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002356 goto failed;
2357 Py_DECREF(value);
2358 value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
2359 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002360 if (_PyObject_SetAttrId(result, &PyId_bases, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002361 goto failed;
2362 Py_DECREF(value);
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002363 value = ast2obj_list(o->v.ClassDef.keywords, ast2obj_keyword);
2364 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002365 if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002366 goto failed;
2367 Py_DECREF(value);
2368 value = ast2obj_expr(o->v.ClassDef.starargs);
2369 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002370 if (_PyObject_SetAttrId(result, &PyId_starargs, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002371 goto failed;
2372 Py_DECREF(value);
2373 value = ast2obj_expr(o->v.ClassDef.kwargs);
2374 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002375 if (_PyObject_SetAttrId(result, &PyId_kwargs, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002376 goto failed;
2377 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002378 value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
2379 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002380 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002381 goto failed;
2382 Py_DECREF(value);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002383 value = ast2obj_list(o->v.ClassDef.decorator_list,
2384 ast2obj_expr);
2385 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002386 if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) ==
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002387 -1)
2388 goto failed;
2389 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002390 break;
2391 case Return_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002392 result = PyType_GenericNew(Return_type, NULL, NULL);
2393 if (!result) goto failed;
2394 value = ast2obj_expr(o->v.Return.value);
2395 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002396 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002397 goto failed;
2398 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002399 break;
2400 case Delete_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002401 result = PyType_GenericNew(Delete_type, NULL, NULL);
2402 if (!result) goto failed;
2403 value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
2404 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002405 if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002406 goto failed;
2407 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002408 break;
2409 case Assign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002410 result = PyType_GenericNew(Assign_type, NULL, NULL);
2411 if (!result) goto failed;
2412 value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
2413 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002414 if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002415 goto failed;
2416 Py_DECREF(value);
2417 value = ast2obj_expr(o->v.Assign.value);
2418 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002419 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002420 goto failed;
2421 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002422 break;
2423 case AugAssign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002424 result = PyType_GenericNew(AugAssign_type, NULL, NULL);
2425 if (!result) goto failed;
2426 value = ast2obj_expr(o->v.AugAssign.target);
2427 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002428 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002429 goto failed;
2430 Py_DECREF(value);
2431 value = ast2obj_operator(o->v.AugAssign.op);
2432 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002433 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002434 goto failed;
2435 Py_DECREF(value);
2436 value = ast2obj_expr(o->v.AugAssign.value);
2437 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002438 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002439 goto failed;
2440 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002441 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002442 case For_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002443 result = PyType_GenericNew(For_type, NULL, NULL);
2444 if (!result) goto failed;
2445 value = ast2obj_expr(o->v.For.target);
2446 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002447 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002448 goto failed;
2449 Py_DECREF(value);
2450 value = ast2obj_expr(o->v.For.iter);
2451 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002452 if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002453 goto failed;
2454 Py_DECREF(value);
2455 value = ast2obj_list(o->v.For.body, ast2obj_stmt);
2456 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002457 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002458 goto failed;
2459 Py_DECREF(value);
2460 value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
2461 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002462 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002463 goto failed;
2464 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002465 break;
2466 case While_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002467 result = PyType_GenericNew(While_type, NULL, NULL);
2468 if (!result) goto failed;
2469 value = ast2obj_expr(o->v.While.test);
2470 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002471 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002472 goto failed;
2473 Py_DECREF(value);
2474 value = ast2obj_list(o->v.While.body, ast2obj_stmt);
2475 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002476 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002477 goto failed;
2478 Py_DECREF(value);
2479 value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
2480 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002481 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002482 goto failed;
2483 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002484 break;
2485 case If_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002486 result = PyType_GenericNew(If_type, NULL, NULL);
2487 if (!result) goto failed;
2488 value = ast2obj_expr(o->v.If.test);
2489 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002490 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002491 goto failed;
2492 Py_DECREF(value);
2493 value = ast2obj_list(o->v.If.body, ast2obj_stmt);
2494 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002495 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002496 goto failed;
2497 Py_DECREF(value);
2498 value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
2499 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002500 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002501 goto failed;
2502 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002503 break;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002504 case With_kind:
2505 result = PyType_GenericNew(With_type, NULL, NULL);
2506 if (!result) goto failed;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05002507 value = ast2obj_list(o->v.With.items, ast2obj_withitem);
Guido van Rossumc2e20742006-02-27 22:32:47 +00002508 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002509 if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002510 goto failed;
2511 Py_DECREF(value);
2512 value = ast2obj_list(o->v.With.body, ast2obj_stmt);
2513 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002514 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002515 goto failed;
2516 Py_DECREF(value);
2517 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002518 case Raise_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002519 result = PyType_GenericNew(Raise_type, NULL, NULL);
2520 if (!result) goto failed;
Collin Winter828f04a2007-08-31 00:04:24 +00002521 value = ast2obj_expr(o->v.Raise.exc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002522 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002523 if (_PyObject_SetAttrId(result, &PyId_exc, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002524 goto failed;
2525 Py_DECREF(value);
Collin Winter828f04a2007-08-31 00:04:24 +00002526 value = ast2obj_expr(o->v.Raise.cause);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002527 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002528 if (_PyObject_SetAttrId(result, &PyId_cause, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002529 goto failed;
2530 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002531 break;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002532 case Try_kind:
2533 result = PyType_GenericNew(Try_type, NULL, NULL);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002534 if (!result) goto failed;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002535 value = ast2obj_list(o->v.Try.body, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002536 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002537 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002538 goto failed;
2539 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002540 value = ast2obj_list(o->v.Try.handlers, ast2obj_excepthandler);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002541 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002542 if (_PyObject_SetAttrId(result, &PyId_handlers, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002543 goto failed;
2544 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002545 value = ast2obj_list(o->v.Try.orelse, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002546 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002547 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002548 goto failed;
2549 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002550 value = ast2obj_list(o->v.Try.finalbody, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002551 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002552 if (_PyObject_SetAttrId(result, &PyId_finalbody, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002553 goto failed;
2554 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002555 break;
2556 case Assert_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002557 result = PyType_GenericNew(Assert_type, NULL, NULL);
2558 if (!result) goto failed;
2559 value = ast2obj_expr(o->v.Assert.test);
2560 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002561 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002562 goto failed;
2563 Py_DECREF(value);
2564 value = ast2obj_expr(o->v.Assert.msg);
2565 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002566 if (_PyObject_SetAttrId(result, &PyId_msg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002567 goto failed;
2568 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002569 break;
2570 case Import_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002571 result = PyType_GenericNew(Import_type, NULL, NULL);
2572 if (!result) goto failed;
2573 value = ast2obj_list(o->v.Import.names, ast2obj_alias);
2574 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002575 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002576 goto failed;
2577 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002578 break;
2579 case ImportFrom_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002580 result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
2581 if (!result) goto failed;
2582 value = ast2obj_identifier(o->v.ImportFrom.module);
2583 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002584 if (_PyObject_SetAttrId(result, &PyId_module, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002585 goto failed;
2586 Py_DECREF(value);
2587 value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
2588 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002589 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002590 goto failed;
2591 Py_DECREF(value);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002592 value = ast2obj_int(o->v.ImportFrom.level);
2593 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002594 if (_PyObject_SetAttrId(result, &PyId_level, value) == -1)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002595 goto failed;
2596 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002597 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002598 case Global_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002599 result = PyType_GenericNew(Global_type, NULL, NULL);
2600 if (!result) goto failed;
2601 value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
2602 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002603 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002604 goto failed;
2605 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002606 break;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002607 case Nonlocal_kind:
2608 result = PyType_GenericNew(Nonlocal_type, NULL, NULL);
2609 if (!result) goto failed;
2610 value = ast2obj_list(o->v.Nonlocal.names, ast2obj_identifier);
2611 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002612 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002613 goto failed;
2614 Py_DECREF(value);
2615 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002616 case Expr_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002617 result = PyType_GenericNew(Expr_type, NULL, NULL);
2618 if (!result) goto failed;
2619 value = ast2obj_expr(o->v.Expr.value);
2620 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002621 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002622 goto failed;
2623 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002624 break;
2625 case Pass_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002626 result = PyType_GenericNew(Pass_type, NULL, NULL);
2627 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002628 break;
2629 case Break_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002630 result = PyType_GenericNew(Break_type, NULL, NULL);
2631 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002632 break;
2633 case Continue_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002634 result = PyType_GenericNew(Continue_type, NULL, NULL);
2635 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002636 break;
2637 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00002638 value = ast2obj_int(o->lineno);
2639 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002640 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00002641 goto failed;
2642 Py_DECREF(value);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002643 value = ast2obj_int(o->col_offset);
2644 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002645 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00002646 goto failed;
2647 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002648 return result;
2649failed:
2650 Py_XDECREF(value);
2651 Py_XDECREF(result);
2652 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002653}
2654
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002655PyObject*
2656ast2obj_expr(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002657{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002658 expr_ty o = (expr_ty)_o;
2659 PyObject *result = NULL, *value = NULL;
2660 if (!o) {
2661 Py_INCREF(Py_None);
2662 return Py_None;
2663 }
2664
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002665 switch (o->kind) {
2666 case BoolOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002667 result = PyType_GenericNew(BoolOp_type, NULL, NULL);
2668 if (!result) goto failed;
2669 value = ast2obj_boolop(o->v.BoolOp.op);
2670 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002671 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002672 goto failed;
2673 Py_DECREF(value);
2674 value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
2675 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002676 if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002677 goto failed;
2678 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002679 break;
2680 case BinOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002681 result = PyType_GenericNew(BinOp_type, NULL, NULL);
2682 if (!result) goto failed;
2683 value = ast2obj_expr(o->v.BinOp.left);
2684 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002685 if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002686 goto failed;
2687 Py_DECREF(value);
2688 value = ast2obj_operator(o->v.BinOp.op);
2689 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002690 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002691 goto failed;
2692 Py_DECREF(value);
2693 value = ast2obj_expr(o->v.BinOp.right);
2694 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002695 if (_PyObject_SetAttrId(result, &PyId_right, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002696 goto failed;
2697 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002698 break;
2699 case UnaryOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002700 result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
2701 if (!result) goto failed;
2702 value = ast2obj_unaryop(o->v.UnaryOp.op);
2703 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002704 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002705 goto failed;
2706 Py_DECREF(value);
2707 value = ast2obj_expr(o->v.UnaryOp.operand);
2708 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002709 if (_PyObject_SetAttrId(result, &PyId_operand, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002710 goto failed;
2711 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002712 break;
2713 case Lambda_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002714 result = PyType_GenericNew(Lambda_type, NULL, NULL);
2715 if (!result) goto failed;
2716 value = ast2obj_arguments(o->v.Lambda.args);
2717 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002718 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002719 goto failed;
2720 Py_DECREF(value);
2721 value = ast2obj_expr(o->v.Lambda.body);
2722 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002723 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002724 goto failed;
2725 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002726 break;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002727 case IfExp_kind:
2728 result = PyType_GenericNew(IfExp_type, NULL, NULL);
2729 if (!result) goto failed;
2730 value = ast2obj_expr(o->v.IfExp.test);
2731 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002732 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002733 goto failed;
2734 Py_DECREF(value);
2735 value = ast2obj_expr(o->v.IfExp.body);
2736 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002737 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002738 goto failed;
2739 Py_DECREF(value);
2740 value = ast2obj_expr(o->v.IfExp.orelse);
2741 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002742 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002743 goto failed;
2744 Py_DECREF(value);
2745 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002746 case Dict_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002747 result = PyType_GenericNew(Dict_type, NULL, NULL);
2748 if (!result) goto failed;
2749 value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
2750 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002751 if (_PyObject_SetAttrId(result, &PyId_keys, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002752 goto failed;
2753 Py_DECREF(value);
2754 value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
2755 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002756 if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002757 goto failed;
2758 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002759 break;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002760 case Set_kind:
2761 result = PyType_GenericNew(Set_type, NULL, NULL);
2762 if (!result) goto failed;
2763 value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
2764 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002765 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002766 goto failed;
2767 Py_DECREF(value);
2768 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002769 case ListComp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002770 result = PyType_GenericNew(ListComp_type, NULL, NULL);
2771 if (!result) goto failed;
2772 value = ast2obj_expr(o->v.ListComp.elt);
2773 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002774 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002775 goto failed;
2776 Py_DECREF(value);
2777 value = ast2obj_list(o->v.ListComp.generators,
2778 ast2obj_comprehension);
2779 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002780 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002781 goto failed;
2782 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002783 break;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002784 case SetComp_kind:
2785 result = PyType_GenericNew(SetComp_type, NULL, NULL);
2786 if (!result) goto failed;
2787 value = ast2obj_expr(o->v.SetComp.elt);
2788 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002789 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002790 goto failed;
2791 Py_DECREF(value);
2792 value = ast2obj_list(o->v.SetComp.generators,
2793 ast2obj_comprehension);
2794 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002795 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002796 goto failed;
2797 Py_DECREF(value);
2798 break;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002799 case DictComp_kind:
2800 result = PyType_GenericNew(DictComp_type, NULL, NULL);
2801 if (!result) goto failed;
2802 value = ast2obj_expr(o->v.DictComp.key);
2803 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002804 if (_PyObject_SetAttrId(result, &PyId_key, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002805 goto failed;
2806 Py_DECREF(value);
2807 value = ast2obj_expr(o->v.DictComp.value);
2808 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002809 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002810 goto failed;
2811 Py_DECREF(value);
2812 value = ast2obj_list(o->v.DictComp.generators,
2813 ast2obj_comprehension);
2814 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002815 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002816 goto failed;
2817 Py_DECREF(value);
2818 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002819 case GeneratorExp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002820 result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
2821 if (!result) goto failed;
2822 value = ast2obj_expr(o->v.GeneratorExp.elt);
2823 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002824 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002825 goto failed;
2826 Py_DECREF(value);
2827 value = ast2obj_list(o->v.GeneratorExp.generators,
2828 ast2obj_comprehension);
2829 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002830 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002831 goto failed;
2832 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002833 break;
2834 case Yield_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002835 result = PyType_GenericNew(Yield_type, NULL, NULL);
2836 if (!result) goto failed;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002837 value = ast2obj_expr(o->v.Yield.value);
Nick Coghlan1f7ce622012-01-13 21:43:40 +10002838 if (!value) goto failed;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002839 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Nick Coghlan1f7ce622012-01-13 21:43:40 +10002840 goto failed;
2841 Py_DECREF(value);
Benjamin Peterson527c6222012-01-14 08:58:23 -05002842 break;
2843 case YieldFrom_kind:
2844 result = PyType_GenericNew(YieldFrom_type, NULL, NULL);
2845 if (!result) goto failed;
2846 value = ast2obj_expr(o->v.YieldFrom.value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002847 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002848 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002849 goto failed;
2850 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002851 break;
2852 case Compare_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002853 result = PyType_GenericNew(Compare_type, NULL, NULL);
2854 if (!result) goto failed;
2855 value = ast2obj_expr(o->v.Compare.left);
2856 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002857 if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002858 goto failed;
2859 Py_DECREF(value);
Martin v. Löwisce1d5d22006-02-26 20:51:25 +00002860 {
Benjamin Peterson77fa9372012-05-15 10:10:27 -07002861 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
Martin v. Löwisce1d5d22006-02-26 20:51:25 +00002862 value = PyList_New(n);
2863 if (!value) goto failed;
2864 for(i = 0; i < n; i++)
2865 PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
2866 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002867 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002868 if (_PyObject_SetAttrId(result, &PyId_ops, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002869 goto failed;
2870 Py_DECREF(value);
2871 value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
2872 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002873 if (_PyObject_SetAttrId(result, &PyId_comparators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002874 goto failed;
2875 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002876 break;
2877 case Call_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002878 result = PyType_GenericNew(Call_type, NULL, NULL);
2879 if (!result) goto failed;
2880 value = ast2obj_expr(o->v.Call.func);
2881 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002882 if (_PyObject_SetAttrId(result, &PyId_func, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002883 goto failed;
2884 Py_DECREF(value);
2885 value = ast2obj_list(o->v.Call.args, ast2obj_expr);
2886 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002887 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002888 goto failed;
2889 Py_DECREF(value);
2890 value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
2891 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002892 if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002893 goto failed;
2894 Py_DECREF(value);
2895 value = ast2obj_expr(o->v.Call.starargs);
2896 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002897 if (_PyObject_SetAttrId(result, &PyId_starargs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002898 goto failed;
2899 Py_DECREF(value);
2900 value = ast2obj_expr(o->v.Call.kwargs);
2901 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002902 if (_PyObject_SetAttrId(result, &PyId_kwargs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002903 goto failed;
2904 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002905 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002906 case Num_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002907 result = PyType_GenericNew(Num_type, NULL, NULL);
2908 if (!result) goto failed;
2909 value = ast2obj_object(o->v.Num.n);
2910 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002911 if (_PyObject_SetAttrId(result, &PyId_n, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002912 goto failed;
2913 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002914 break;
2915 case Str_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002916 result = PyType_GenericNew(Str_type, NULL, NULL);
2917 if (!result) goto failed;
2918 value = ast2obj_string(o->v.Str.s);
2919 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002920 if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002921 goto failed;
2922 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002923 break;
Thomas Wouters00e41de2007-02-23 19:56:57 +00002924 case Bytes_kind:
2925 result = PyType_GenericNew(Bytes_type, NULL, NULL);
2926 if (!result) goto failed;
Benjamin Petersone2498412011-08-09 16:08:39 -05002927 value = ast2obj_bytes(o->v.Bytes.s);
Thomas Wouters00e41de2007-02-23 19:56:57 +00002928 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002929 if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
Thomas Wouters00e41de2007-02-23 19:56:57 +00002930 goto failed;
2931 Py_DECREF(value);
2932 break;
Georg Brandl52318d62006-09-06 07:06:08 +00002933 case Ellipsis_kind:
2934 result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
2935 if (!result) goto failed;
2936 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002937 case Attribute_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002938 result = PyType_GenericNew(Attribute_type, NULL, NULL);
2939 if (!result) goto failed;
2940 value = ast2obj_expr(o->v.Attribute.value);
2941 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002942 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002943 goto failed;
2944 Py_DECREF(value);
2945 value = ast2obj_identifier(o->v.Attribute.attr);
2946 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002947 if (_PyObject_SetAttrId(result, &PyId_attr, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002948 goto failed;
2949 Py_DECREF(value);
2950 value = ast2obj_expr_context(o->v.Attribute.ctx);
2951 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002952 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002953 goto failed;
2954 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002955 break;
2956 case Subscript_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002957 result = PyType_GenericNew(Subscript_type, NULL, NULL);
2958 if (!result) goto failed;
2959 value = ast2obj_expr(o->v.Subscript.value);
2960 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002961 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002962 goto failed;
2963 Py_DECREF(value);
2964 value = ast2obj_slice(o->v.Subscript.slice);
2965 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002966 if (_PyObject_SetAttrId(result, &PyId_slice, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002967 goto failed;
2968 Py_DECREF(value);
2969 value = ast2obj_expr_context(o->v.Subscript.ctx);
2970 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002971 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002972 goto failed;
2973 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002974 break;
Guido van Rossum0368b722007-05-11 16:50:42 +00002975 case Starred_kind:
2976 result = PyType_GenericNew(Starred_type, NULL, NULL);
2977 if (!result) goto failed;
2978 value = ast2obj_expr(o->v.Starred.value);
2979 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002980 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Guido van Rossum0368b722007-05-11 16:50:42 +00002981 goto failed;
2982 Py_DECREF(value);
2983 value = ast2obj_expr_context(o->v.Starred.ctx);
2984 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002985 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Guido van Rossum0368b722007-05-11 16:50:42 +00002986 goto failed;
2987 Py_DECREF(value);
2988 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002989 case Name_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002990 result = PyType_GenericNew(Name_type, NULL, NULL);
2991 if (!result) goto failed;
2992 value = ast2obj_identifier(o->v.Name.id);
2993 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002994 if (_PyObject_SetAttrId(result, &PyId_id, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002995 goto failed;
2996 Py_DECREF(value);
2997 value = ast2obj_expr_context(o->v.Name.ctx);
2998 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002999 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003000 goto failed;
3001 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003002 break;
3003 case List_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003004 result = PyType_GenericNew(List_type, NULL, NULL);
3005 if (!result) goto failed;
3006 value = ast2obj_list(o->v.List.elts, ast2obj_expr);
3007 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003008 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003009 goto failed;
3010 Py_DECREF(value);
3011 value = ast2obj_expr_context(o->v.List.ctx);
3012 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003013 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003014 goto failed;
3015 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003016 break;
3017 case Tuple_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003018 result = PyType_GenericNew(Tuple_type, NULL, NULL);
3019 if (!result) goto failed;
3020 value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
3021 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003022 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003023 goto failed;
3024 Py_DECREF(value);
3025 value = ast2obj_expr_context(o->v.Tuple.ctx);
3026 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003027 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003028 goto failed;
3029 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003030 break;
3031 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003032 value = ast2obj_int(o->lineno);
3033 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003034 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003035 goto failed;
3036 Py_DECREF(value);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003037 value = ast2obj_int(o->col_offset);
3038 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003039 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003040 goto failed;
3041 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003042 return result;
3043failed:
3044 Py_XDECREF(value);
3045 Py_XDECREF(result);
3046 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003047}
3048
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003049PyObject* ast2obj_expr_context(expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003050{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003051 switch(o) {
3052 case Load:
3053 Py_INCREF(Load_singleton);
3054 return Load_singleton;
3055 case Store:
3056 Py_INCREF(Store_singleton);
3057 return Store_singleton;
3058 case Del:
3059 Py_INCREF(Del_singleton);
3060 return Del_singleton;
3061 case AugLoad:
3062 Py_INCREF(AugLoad_singleton);
3063 return AugLoad_singleton;
3064 case AugStore:
3065 Py_INCREF(AugStore_singleton);
3066 return AugStore_singleton;
3067 case Param:
3068 Py_INCREF(Param_singleton);
3069 return Param_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003070 default:
3071 /* should never happen, but just in case ... */
3072 PyErr_Format(PyExc_SystemError, "unknown expr_context found");
3073 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003074 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003075}
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003076PyObject*
3077ast2obj_slice(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003078{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003079 slice_ty o = (slice_ty)_o;
3080 PyObject *result = NULL, *value = NULL;
3081 if (!o) {
3082 Py_INCREF(Py_None);
3083 return Py_None;
3084 }
3085
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003086 switch (o->kind) {
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003087 case Slice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003088 result = PyType_GenericNew(Slice_type, NULL, NULL);
3089 if (!result) goto failed;
3090 value = ast2obj_expr(o->v.Slice.lower);
3091 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003092 if (_PyObject_SetAttrId(result, &PyId_lower, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003093 goto failed;
3094 Py_DECREF(value);
3095 value = ast2obj_expr(o->v.Slice.upper);
3096 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003097 if (_PyObject_SetAttrId(result, &PyId_upper, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003098 goto failed;
3099 Py_DECREF(value);
3100 value = ast2obj_expr(o->v.Slice.step);
3101 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003102 if (_PyObject_SetAttrId(result, &PyId_step, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003103 goto failed;
3104 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003105 break;
3106 case ExtSlice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003107 result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
3108 if (!result) goto failed;
3109 value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
3110 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003111 if (_PyObject_SetAttrId(result, &PyId_dims, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003112 goto failed;
3113 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003114 break;
3115 case Index_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003116 result = PyType_GenericNew(Index_type, NULL, NULL);
3117 if (!result) goto failed;
3118 value = ast2obj_expr(o->v.Index.value);
3119 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003120 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003121 goto failed;
3122 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003123 break;
3124 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003125 return result;
3126failed:
3127 Py_XDECREF(value);
3128 Py_XDECREF(result);
3129 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003130}
3131
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003132PyObject* ast2obj_boolop(boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003133{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003134 switch(o) {
3135 case And:
3136 Py_INCREF(And_singleton);
3137 return And_singleton;
3138 case Or:
3139 Py_INCREF(Or_singleton);
3140 return Or_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003141 default:
3142 /* should never happen, but just in case ... */
3143 PyErr_Format(PyExc_SystemError, "unknown boolop found");
3144 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003145 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003146}
3147PyObject* ast2obj_operator(operator_ty o)
3148{
3149 switch(o) {
3150 case Add:
3151 Py_INCREF(Add_singleton);
3152 return Add_singleton;
3153 case Sub:
3154 Py_INCREF(Sub_singleton);
3155 return Sub_singleton;
3156 case Mult:
3157 Py_INCREF(Mult_singleton);
3158 return Mult_singleton;
3159 case Div:
3160 Py_INCREF(Div_singleton);
3161 return Div_singleton;
3162 case Mod:
3163 Py_INCREF(Mod_singleton);
3164 return Mod_singleton;
3165 case Pow:
3166 Py_INCREF(Pow_singleton);
3167 return Pow_singleton;
3168 case LShift:
3169 Py_INCREF(LShift_singleton);
3170 return LShift_singleton;
3171 case RShift:
3172 Py_INCREF(RShift_singleton);
3173 return RShift_singleton;
3174 case BitOr:
3175 Py_INCREF(BitOr_singleton);
3176 return BitOr_singleton;
3177 case BitXor:
3178 Py_INCREF(BitXor_singleton);
3179 return BitXor_singleton;
3180 case BitAnd:
3181 Py_INCREF(BitAnd_singleton);
3182 return BitAnd_singleton;
3183 case FloorDiv:
3184 Py_INCREF(FloorDiv_singleton);
3185 return FloorDiv_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003186 default:
3187 /* should never happen, but just in case ... */
3188 PyErr_Format(PyExc_SystemError, "unknown operator found");
3189 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003190 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003191}
3192PyObject* ast2obj_unaryop(unaryop_ty o)
3193{
3194 switch(o) {
3195 case Invert:
3196 Py_INCREF(Invert_singleton);
3197 return Invert_singleton;
3198 case Not:
3199 Py_INCREF(Not_singleton);
3200 return Not_singleton;
3201 case UAdd:
3202 Py_INCREF(UAdd_singleton);
3203 return UAdd_singleton;
3204 case USub:
3205 Py_INCREF(USub_singleton);
3206 return USub_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003207 default:
3208 /* should never happen, but just in case ... */
3209 PyErr_Format(PyExc_SystemError, "unknown unaryop found");
3210 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003211 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003212}
3213PyObject* ast2obj_cmpop(cmpop_ty o)
3214{
3215 switch(o) {
3216 case Eq:
3217 Py_INCREF(Eq_singleton);
3218 return Eq_singleton;
3219 case NotEq:
3220 Py_INCREF(NotEq_singleton);
3221 return NotEq_singleton;
3222 case Lt:
3223 Py_INCREF(Lt_singleton);
3224 return Lt_singleton;
3225 case LtE:
3226 Py_INCREF(LtE_singleton);
3227 return LtE_singleton;
3228 case Gt:
3229 Py_INCREF(Gt_singleton);
3230 return Gt_singleton;
3231 case GtE:
3232 Py_INCREF(GtE_singleton);
3233 return GtE_singleton;
3234 case Is:
3235 Py_INCREF(Is_singleton);
3236 return Is_singleton;
3237 case IsNot:
3238 Py_INCREF(IsNot_singleton);
3239 return IsNot_singleton;
3240 case In:
3241 Py_INCREF(In_singleton);
3242 return In_singleton;
3243 case NotIn:
3244 Py_INCREF(NotIn_singleton);
3245 return NotIn_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003246 default:
3247 /* should never happen, but just in case ... */
3248 PyErr_Format(PyExc_SystemError, "unknown cmpop found");
3249 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003250 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003251}
3252PyObject*
3253ast2obj_comprehension(void* _o)
3254{
3255 comprehension_ty o = (comprehension_ty)_o;
3256 PyObject *result = NULL, *value = NULL;
3257 if (!o) {
3258 Py_INCREF(Py_None);
3259 return Py_None;
3260 }
3261
3262 result = PyType_GenericNew(comprehension_type, NULL, NULL);
3263 if (!result) return NULL;
3264 value = ast2obj_expr(o->target);
3265 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003266 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003267 goto failed;
3268 Py_DECREF(value);
3269 value = ast2obj_expr(o->iter);
3270 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003271 if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003272 goto failed;
3273 Py_DECREF(value);
3274 value = ast2obj_list(o->ifs, ast2obj_expr);
3275 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003276 if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003277 goto failed;
3278 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003279 return result;
3280failed:
3281 Py_XDECREF(value);
3282 Py_XDECREF(result);
3283 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003284}
3285
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003286PyObject*
3287ast2obj_excepthandler(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003288{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003289 excepthandler_ty o = (excepthandler_ty)_o;
3290 PyObject *result = NULL, *value = NULL;
3291 if (!o) {
3292 Py_INCREF(Py_None);
3293 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003294 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003295
Neal Norwitzad74aa82008-03-31 05:14:30 +00003296 switch (o->kind) {
3297 case ExceptHandler_kind:
3298 result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
3299 if (!result) goto failed;
3300 value = ast2obj_expr(o->v.ExceptHandler.type);
3301 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003302 if (_PyObject_SetAttrId(result, &PyId_type, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003303 goto failed;
3304 Py_DECREF(value);
3305 value = ast2obj_identifier(o->v.ExceptHandler.name);
3306 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003307 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003308 goto failed;
3309 Py_DECREF(value);
3310 value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
3311 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003312 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003313 goto failed;
3314 Py_DECREF(value);
3315 break;
3316 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003317 value = ast2obj_int(o->lineno);
3318 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003319 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003320 goto failed;
3321 Py_DECREF(value);
3322 value = ast2obj_int(o->col_offset);
3323 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003324 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003325 goto failed;
3326 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003327 return result;
3328failed:
3329 Py_XDECREF(value);
3330 Py_XDECREF(result);
3331 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003332}
3333
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003334PyObject*
3335ast2obj_arguments(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003336{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003337 arguments_ty o = (arguments_ty)_o;
3338 PyObject *result = NULL, *value = NULL;
3339 if (!o) {
3340 Py_INCREF(Py_None);
3341 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003342 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003343
3344 result = PyType_GenericNew(arguments_type, NULL, NULL);
3345 if (!result) return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00003346 value = ast2obj_list(o->args, ast2obj_arg);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003347 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003348 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003349 goto failed;
3350 Py_DECREF(value);
3351 value = ast2obj_identifier(o->vararg);
3352 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003353 if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003354 goto failed;
3355 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003356 value = ast2obj_expr(o->varargannotation);
3357 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003358 if (_PyObject_SetAttrId(result, &PyId_varargannotation, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00003359 goto failed;
3360 Py_DECREF(value);
3361 value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003362 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003363 if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1)
Guido van Rossum4f72a782006-10-27 23:31:49 +00003364 goto failed;
3365 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003366 value = ast2obj_identifier(o->kwarg);
3367 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003368 if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003369 goto failed;
3370 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003371 value = ast2obj_expr(o->kwargannotation);
3372 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003373 if (_PyObject_SetAttrId(result, &PyId_kwargannotation, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00003374 goto failed;
3375 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003376 value = ast2obj_list(o->defaults, ast2obj_expr);
3377 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003378 if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003379 goto failed;
3380 Py_DECREF(value);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003381 value = ast2obj_list(o->kw_defaults, ast2obj_expr);
3382 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003383 if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1)
Guido van Rossum4f72a782006-10-27 23:31:49 +00003384 goto failed;
3385 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003386 return result;
3387failed:
3388 Py_XDECREF(value);
3389 Py_XDECREF(result);
3390 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003391}
3392
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003393PyObject*
Neal Norwitzc1505362006-12-28 06:47:50 +00003394ast2obj_arg(void* _o)
3395{
3396 arg_ty o = (arg_ty)_o;
3397 PyObject *result = NULL, *value = NULL;
3398 if (!o) {
3399 Py_INCREF(Py_None);
3400 return Py_None;
3401 }
3402
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003403 result = PyType_GenericNew(arg_type, NULL, NULL);
3404 if (!result) return NULL;
3405 value = ast2obj_identifier(o->arg);
3406 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003407 if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003408 goto failed;
3409 Py_DECREF(value);
3410 value = ast2obj_expr(o->annotation);
3411 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003412 if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003413 goto failed;
3414 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003415 return result;
3416failed:
3417 Py_XDECREF(value);
3418 Py_XDECREF(result);
3419 return NULL;
3420}
3421
3422PyObject*
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003423ast2obj_keyword(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003424{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003425 keyword_ty o = (keyword_ty)_o;
3426 PyObject *result = NULL, *value = NULL;
3427 if (!o) {
3428 Py_INCREF(Py_None);
3429 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003430 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003431
3432 result = PyType_GenericNew(keyword_type, NULL, NULL);
3433 if (!result) return NULL;
3434 value = ast2obj_identifier(o->arg);
3435 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003436 if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003437 goto failed;
3438 Py_DECREF(value);
3439 value = ast2obj_expr(o->value);
3440 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003441 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003442 goto failed;
3443 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003444 return result;
3445failed:
3446 Py_XDECREF(value);
3447 Py_XDECREF(result);
3448 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003449}
3450
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003451PyObject*
3452ast2obj_alias(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003453{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003454 alias_ty o = (alias_ty)_o;
3455 PyObject *result = NULL, *value = NULL;
3456 if (!o) {
3457 Py_INCREF(Py_None);
3458 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003459 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003460
3461 result = PyType_GenericNew(alias_type, NULL, NULL);
3462 if (!result) return NULL;
3463 value = ast2obj_identifier(o->name);
3464 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003465 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003466 goto failed;
3467 Py_DECREF(value);
3468 value = ast2obj_identifier(o->asname);
3469 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003470 if (_PyObject_SetAttrId(result, &PyId_asname, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003471 goto failed;
3472 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003473 return result;
3474failed:
3475 Py_XDECREF(value);
3476 Py_XDECREF(result);
3477 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003478}
3479
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003480PyObject*
3481ast2obj_withitem(void* _o)
3482{
3483 withitem_ty o = (withitem_ty)_o;
3484 PyObject *result = NULL, *value = NULL;
3485 if (!o) {
3486 Py_INCREF(Py_None);
3487 return Py_None;
3488 }
3489
3490 result = PyType_GenericNew(withitem_type, NULL, NULL);
3491 if (!result) return NULL;
3492 value = ast2obj_expr(o->context_expr);
3493 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003494 if (_PyObject_SetAttrId(result, &PyId_context_expr, value) == -1)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003495 goto failed;
3496 Py_DECREF(value);
3497 value = ast2obj_expr(o->optional_vars);
3498 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003499 if (_PyObject_SetAttrId(result, &PyId_optional_vars, value) == -1)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003500 goto failed;
3501 Py_DECREF(value);
3502 return result;
3503failed:
3504 Py_XDECREF(value);
3505 Py_XDECREF(result);
3506 return NULL;
3507}
3508
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003509
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003510int
3511obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
3512{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003513 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003514
Benjamin Petersond8f65972010-11-20 04:31:07 +00003515 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003516
3517 if (obj == Py_None) {
3518 *out = NULL;
3519 return 0;
3520 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003521 isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
3522 if (isinstance == -1) {
3523 return 1;
3524 }
3525 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003526 asdl_seq* body;
3527
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003528 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003529 int res;
3530 Py_ssize_t len;
3531 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003532 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003533 if (tmp == NULL) goto failed;
3534 if (!PyList_Check(tmp)) {
3535 PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3536 goto failed;
3537 }
3538 len = PyList_GET_SIZE(tmp);
3539 body = asdl_seq_new(len, arena);
3540 if (body == NULL) goto failed;
3541 for (i = 0; i < len; i++) {
3542 stmt_ty value;
3543 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3544 if (res != 0) goto failed;
3545 asdl_seq_SET(body, i, value);
3546 }
3547 Py_XDECREF(tmp);
3548 tmp = NULL;
3549 } else {
3550 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
3551 return 1;
3552 }
3553 *out = Module(body, arena);
3554 if (*out == NULL) goto failed;
3555 return 0;
3556 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003557 isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
3558 if (isinstance == -1) {
3559 return 1;
3560 }
3561 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003562 asdl_seq* body;
3563
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003564 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003565 int res;
3566 Py_ssize_t len;
3567 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003568 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003569 if (tmp == NULL) goto failed;
3570 if (!PyList_Check(tmp)) {
3571 PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3572 goto failed;
3573 }
3574 len = PyList_GET_SIZE(tmp);
3575 body = asdl_seq_new(len, arena);
3576 if (body == NULL) goto failed;
3577 for (i = 0; i < len; i++) {
3578 stmt_ty value;
3579 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3580 if (res != 0) goto failed;
3581 asdl_seq_SET(body, i, value);
3582 }
3583 Py_XDECREF(tmp);
3584 tmp = NULL;
3585 } else {
3586 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
3587 return 1;
3588 }
3589 *out = Interactive(body, arena);
3590 if (*out == NULL) goto failed;
3591 return 0;
3592 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003593 isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
3594 if (isinstance == -1) {
3595 return 1;
3596 }
3597 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003598 expr_ty body;
3599
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003600 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003601 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003602 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003603 if (tmp == NULL) goto failed;
3604 res = obj2ast_expr(tmp, &body, arena);
3605 if (res != 0) goto failed;
3606 Py_XDECREF(tmp);
3607 tmp = NULL;
3608 } else {
3609 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
3610 return 1;
3611 }
3612 *out = Expression(body, arena);
3613 if (*out == NULL) goto failed;
3614 return 0;
3615 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003616 isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
3617 if (isinstance == -1) {
3618 return 1;
3619 }
3620 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003621 asdl_seq* body;
3622
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003623 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003624 int res;
3625 Py_ssize_t len;
3626 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003627 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003628 if (tmp == NULL) goto failed;
3629 if (!PyList_Check(tmp)) {
3630 PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3631 goto failed;
3632 }
3633 len = PyList_GET_SIZE(tmp);
3634 body = asdl_seq_new(len, arena);
3635 if (body == NULL) goto failed;
3636 for (i = 0; i < len; i++) {
3637 stmt_ty value;
3638 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3639 if (res != 0) goto failed;
3640 asdl_seq_SET(body, i, value);
3641 }
3642 Py_XDECREF(tmp);
3643 tmp = NULL;
3644 } else {
3645 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
3646 return 1;
3647 }
3648 *out = Suite(body, arena);
3649 if (*out == NULL) goto failed;
3650 return 0;
3651 }
3652
Benjamin Peterson5b066812010-11-20 01:38:49 +00003653 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
3654 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00003655 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003656 return 1;
3657}
3658
3659int
3660obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
3661{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003662 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003663
Benjamin Petersond8f65972010-11-20 04:31:07 +00003664 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003665 int lineno;
3666 int col_offset;
3667
3668 if (obj == Py_None) {
3669 *out = NULL;
3670 return 0;
3671 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003672 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003673 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003674 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003675 if (tmp == NULL) goto failed;
3676 res = obj2ast_int(tmp, &lineno, arena);
3677 if (res != 0) goto failed;
3678 Py_XDECREF(tmp);
3679 tmp = NULL;
3680 } else {
3681 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
3682 return 1;
3683 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003684 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003685 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003686 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003687 if (tmp == NULL) goto failed;
3688 res = obj2ast_int(tmp, &col_offset, arena);
3689 if (res != 0) goto failed;
3690 Py_XDECREF(tmp);
3691 tmp = NULL;
3692 } else {
3693 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
3694 return 1;
3695 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003696 isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
3697 if (isinstance == -1) {
3698 return 1;
3699 }
3700 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003701 identifier name;
3702 arguments_ty args;
3703 asdl_seq* body;
3704 asdl_seq* decorator_list;
3705 expr_ty returns;
3706
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003707 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003708 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003709 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003710 if (tmp == NULL) goto failed;
3711 res = obj2ast_identifier(tmp, &name, arena);
3712 if (res != 0) goto failed;
3713 Py_XDECREF(tmp);
3714 tmp = NULL;
3715 } else {
3716 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
3717 return 1;
3718 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003719 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003720 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003721 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003722 if (tmp == NULL) goto failed;
3723 res = obj2ast_arguments(tmp, &args, arena);
3724 if (res != 0) goto failed;
3725 Py_XDECREF(tmp);
3726 tmp = NULL;
3727 } else {
3728 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
3729 return 1;
3730 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003731 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003732 int res;
3733 Py_ssize_t len;
3734 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003735 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003736 if (tmp == NULL) goto failed;
3737 if (!PyList_Check(tmp)) {
3738 PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3739 goto failed;
3740 }
3741 len = PyList_GET_SIZE(tmp);
3742 body = asdl_seq_new(len, arena);
3743 if (body == NULL) goto failed;
3744 for (i = 0; i < len; i++) {
3745 stmt_ty value;
3746 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3747 if (res != 0) goto failed;
3748 asdl_seq_SET(body, i, value);
3749 }
3750 Py_XDECREF(tmp);
3751 tmp = NULL;
3752 } else {
3753 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
3754 return 1;
3755 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003756 if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003757 int res;
3758 Py_ssize_t len;
3759 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003760 tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003761 if (tmp == NULL) goto failed;
3762 if (!PyList_Check(tmp)) {
3763 PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3764 goto failed;
3765 }
3766 len = PyList_GET_SIZE(tmp);
3767 decorator_list = asdl_seq_new(len, arena);
3768 if (decorator_list == NULL) goto failed;
3769 for (i = 0; i < len; i++) {
3770 expr_ty value;
3771 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3772 if (res != 0) goto failed;
3773 asdl_seq_SET(decorator_list, i, value);
3774 }
3775 Py_XDECREF(tmp);
3776 tmp = NULL;
3777 } else {
3778 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
3779 return 1;
3780 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003781 if (_PyObject_HasAttrId(obj, &PyId_returns)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003782 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003783 tmp = _PyObject_GetAttrId(obj, &PyId_returns);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003784 if (tmp == NULL) goto failed;
3785 res = obj2ast_expr(tmp, &returns, arena);
3786 if (res != 0) goto failed;
3787 Py_XDECREF(tmp);
3788 tmp = NULL;
3789 } else {
3790 returns = NULL;
3791 }
3792 *out = FunctionDef(name, args, body, decorator_list, returns,
3793 lineno, col_offset, arena);
3794 if (*out == NULL) goto failed;
3795 return 0;
3796 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003797 isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
3798 if (isinstance == -1) {
3799 return 1;
3800 }
3801 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003802 identifier name;
3803 asdl_seq* bases;
3804 asdl_seq* keywords;
3805 expr_ty starargs;
3806 expr_ty kwargs;
3807 asdl_seq* body;
3808 asdl_seq* decorator_list;
3809
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003810 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003811 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003812 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003813 if (tmp == NULL) goto failed;
3814 res = obj2ast_identifier(tmp, &name, arena);
3815 if (res != 0) goto failed;
3816 Py_XDECREF(tmp);
3817 tmp = NULL;
3818 } else {
3819 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
3820 return 1;
3821 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003822 if (_PyObject_HasAttrId(obj, &PyId_bases)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003823 int res;
3824 Py_ssize_t len;
3825 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003826 tmp = _PyObject_GetAttrId(obj, &PyId_bases);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003827 if (tmp == NULL) goto failed;
3828 if (!PyList_Check(tmp)) {
3829 PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3830 goto failed;
3831 }
3832 len = PyList_GET_SIZE(tmp);
3833 bases = asdl_seq_new(len, arena);
3834 if (bases == NULL) goto failed;
3835 for (i = 0; i < len; i++) {
3836 expr_ty value;
3837 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3838 if (res != 0) goto failed;
3839 asdl_seq_SET(bases, i, value);
3840 }
3841 Py_XDECREF(tmp);
3842 tmp = NULL;
3843 } else {
3844 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
3845 return 1;
3846 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003847 if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003848 int res;
3849 Py_ssize_t len;
3850 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003851 tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003852 if (tmp == NULL) goto failed;
3853 if (!PyList_Check(tmp)) {
3854 PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3855 goto failed;
3856 }
3857 len = PyList_GET_SIZE(tmp);
3858 keywords = asdl_seq_new(len, arena);
3859 if (keywords == NULL) goto failed;
3860 for (i = 0; i < len; i++) {
3861 keyword_ty value;
3862 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
3863 if (res != 0) goto failed;
3864 asdl_seq_SET(keywords, i, value);
3865 }
3866 Py_XDECREF(tmp);
3867 tmp = NULL;
3868 } else {
3869 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
3870 return 1;
3871 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003872 if (_PyObject_HasAttrId(obj, &PyId_starargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003873 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003874 tmp = _PyObject_GetAttrId(obj, &PyId_starargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003875 if (tmp == NULL) goto failed;
3876 res = obj2ast_expr(tmp, &starargs, arena);
3877 if (res != 0) goto failed;
3878 Py_XDECREF(tmp);
3879 tmp = NULL;
3880 } else {
3881 starargs = NULL;
3882 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003883 if (_PyObject_HasAttrId(obj, &PyId_kwargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003884 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003885 tmp = _PyObject_GetAttrId(obj, &PyId_kwargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003886 if (tmp == NULL) goto failed;
3887 res = obj2ast_expr(tmp, &kwargs, arena);
3888 if (res != 0) goto failed;
3889 Py_XDECREF(tmp);
3890 tmp = NULL;
3891 } else {
3892 kwargs = NULL;
3893 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003894 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003895 int res;
3896 Py_ssize_t len;
3897 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003898 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003899 if (tmp == NULL) goto failed;
3900 if (!PyList_Check(tmp)) {
3901 PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3902 goto failed;
3903 }
3904 len = PyList_GET_SIZE(tmp);
3905 body = asdl_seq_new(len, arena);
3906 if (body == NULL) goto failed;
3907 for (i = 0; i < len; i++) {
3908 stmt_ty value;
3909 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3910 if (res != 0) goto failed;
3911 asdl_seq_SET(body, i, value);
3912 }
3913 Py_XDECREF(tmp);
3914 tmp = NULL;
3915 } else {
3916 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
3917 return 1;
3918 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003919 if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003920 int res;
3921 Py_ssize_t len;
3922 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003923 tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003924 if (tmp == NULL) goto failed;
3925 if (!PyList_Check(tmp)) {
3926 PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3927 goto failed;
3928 }
3929 len = PyList_GET_SIZE(tmp);
3930 decorator_list = asdl_seq_new(len, arena);
3931 if (decorator_list == NULL) goto failed;
3932 for (i = 0; i < len; i++) {
3933 expr_ty value;
3934 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3935 if (res != 0) goto failed;
3936 asdl_seq_SET(decorator_list, i, value);
3937 }
3938 Py_XDECREF(tmp);
3939 tmp = NULL;
3940 } else {
3941 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
3942 return 1;
3943 }
3944 *out = ClassDef(name, bases, keywords, starargs, kwargs, body,
3945 decorator_list, lineno, col_offset, arena);
3946 if (*out == NULL) goto failed;
3947 return 0;
3948 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003949 isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
3950 if (isinstance == -1) {
3951 return 1;
3952 }
3953 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003954 expr_ty value;
3955
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003956 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003957 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003958 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003959 if (tmp == NULL) goto failed;
3960 res = obj2ast_expr(tmp, &value, arena);
3961 if (res != 0) goto failed;
3962 Py_XDECREF(tmp);
3963 tmp = NULL;
3964 } else {
3965 value = NULL;
3966 }
3967 *out = Return(value, lineno, col_offset, arena);
3968 if (*out == NULL) goto failed;
3969 return 0;
3970 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003971 isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
3972 if (isinstance == -1) {
3973 return 1;
3974 }
3975 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003976 asdl_seq* targets;
3977
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003978 if (_PyObject_HasAttrId(obj, &PyId_targets)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003979 int res;
3980 Py_ssize_t len;
3981 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003982 tmp = _PyObject_GetAttrId(obj, &PyId_targets);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003983 if (tmp == NULL) goto failed;
3984 if (!PyList_Check(tmp)) {
3985 PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3986 goto failed;
3987 }
3988 len = PyList_GET_SIZE(tmp);
3989 targets = asdl_seq_new(len, arena);
3990 if (targets == NULL) goto failed;
3991 for (i = 0; i < len; i++) {
3992 expr_ty value;
3993 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3994 if (res != 0) goto failed;
3995 asdl_seq_SET(targets, i, value);
3996 }
3997 Py_XDECREF(tmp);
3998 tmp = NULL;
3999 } else {
4000 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
4001 return 1;
4002 }
4003 *out = Delete(targets, lineno, col_offset, arena);
4004 if (*out == NULL) goto failed;
4005 return 0;
4006 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004007 isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
4008 if (isinstance == -1) {
4009 return 1;
4010 }
4011 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004012 asdl_seq* targets;
4013 expr_ty value;
4014
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004015 if (_PyObject_HasAttrId(obj, &PyId_targets)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004016 int res;
4017 Py_ssize_t len;
4018 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004019 tmp = _PyObject_GetAttrId(obj, &PyId_targets);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004020 if (tmp == NULL) goto failed;
4021 if (!PyList_Check(tmp)) {
4022 PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4023 goto failed;
4024 }
4025 len = PyList_GET_SIZE(tmp);
4026 targets = asdl_seq_new(len, arena);
4027 if (targets == NULL) goto failed;
4028 for (i = 0; i < len; i++) {
4029 expr_ty value;
4030 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4031 if (res != 0) goto failed;
4032 asdl_seq_SET(targets, i, value);
4033 }
4034 Py_XDECREF(tmp);
4035 tmp = NULL;
4036 } else {
4037 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
4038 return 1;
4039 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004040 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004041 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004042 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004043 if (tmp == NULL) goto failed;
4044 res = obj2ast_expr(tmp, &value, arena);
4045 if (res != 0) goto failed;
4046 Py_XDECREF(tmp);
4047 tmp = NULL;
4048 } else {
4049 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
4050 return 1;
4051 }
4052 *out = Assign(targets, value, lineno, col_offset, arena);
4053 if (*out == NULL) goto failed;
4054 return 0;
4055 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004056 isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
4057 if (isinstance == -1) {
4058 return 1;
4059 }
4060 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004061 expr_ty target;
4062 operator_ty op;
4063 expr_ty value;
4064
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004065 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004066 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004067 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004068 if (tmp == NULL) goto failed;
4069 res = obj2ast_expr(tmp, &target, arena);
4070 if (res != 0) goto failed;
4071 Py_XDECREF(tmp);
4072 tmp = NULL;
4073 } else {
4074 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
4075 return 1;
4076 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004077 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004078 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004079 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004080 if (tmp == NULL) goto failed;
4081 res = obj2ast_operator(tmp, &op, arena);
4082 if (res != 0) goto failed;
4083 Py_XDECREF(tmp);
4084 tmp = NULL;
4085 } else {
4086 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
4087 return 1;
4088 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004089 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004090 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004091 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004092 if (tmp == NULL) goto failed;
4093 res = obj2ast_expr(tmp, &value, arena);
4094 if (res != 0) goto failed;
4095 Py_XDECREF(tmp);
4096 tmp = NULL;
4097 } else {
4098 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
4099 return 1;
4100 }
4101 *out = AugAssign(target, op, value, lineno, col_offset, arena);
4102 if (*out == NULL) goto failed;
4103 return 0;
4104 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004105 isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
4106 if (isinstance == -1) {
4107 return 1;
4108 }
4109 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004110 expr_ty target;
4111 expr_ty iter;
4112 asdl_seq* body;
4113 asdl_seq* orelse;
4114
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004115 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004116 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004117 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004118 if (tmp == NULL) goto failed;
4119 res = obj2ast_expr(tmp, &target, arena);
4120 if (res != 0) goto failed;
4121 Py_XDECREF(tmp);
4122 tmp = NULL;
4123 } else {
4124 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
4125 return 1;
4126 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004127 if (_PyObject_HasAttrId(obj, &PyId_iter)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004128 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004129 tmp = _PyObject_GetAttrId(obj, &PyId_iter);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004130 if (tmp == NULL) goto failed;
4131 res = obj2ast_expr(tmp, &iter, arena);
4132 if (res != 0) goto failed;
4133 Py_XDECREF(tmp);
4134 tmp = NULL;
4135 } else {
4136 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
4137 return 1;
4138 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004139 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004140 int res;
4141 Py_ssize_t len;
4142 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004143 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004144 if (tmp == NULL) goto failed;
4145 if (!PyList_Check(tmp)) {
4146 PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4147 goto failed;
4148 }
4149 len = PyList_GET_SIZE(tmp);
4150 body = asdl_seq_new(len, arena);
4151 if (body == NULL) goto failed;
4152 for (i = 0; i < len; i++) {
4153 stmt_ty value;
4154 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4155 if (res != 0) goto failed;
4156 asdl_seq_SET(body, i, value);
4157 }
4158 Py_XDECREF(tmp);
4159 tmp = NULL;
4160 } else {
4161 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
4162 return 1;
4163 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004164 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004165 int res;
4166 Py_ssize_t len;
4167 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004168 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004169 if (tmp == NULL) goto failed;
4170 if (!PyList_Check(tmp)) {
4171 PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4172 goto failed;
4173 }
4174 len = PyList_GET_SIZE(tmp);
4175 orelse = asdl_seq_new(len, arena);
4176 if (orelse == NULL) goto failed;
4177 for (i = 0; i < len; i++) {
4178 stmt_ty value;
4179 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4180 if (res != 0) goto failed;
4181 asdl_seq_SET(orelse, i, value);
4182 }
4183 Py_XDECREF(tmp);
4184 tmp = NULL;
4185 } else {
4186 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
4187 return 1;
4188 }
4189 *out = For(target, iter, body, orelse, lineno, col_offset,
4190 arena);
4191 if (*out == NULL) goto failed;
4192 return 0;
4193 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004194 isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
4195 if (isinstance == -1) {
4196 return 1;
4197 }
4198 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004199 expr_ty test;
4200 asdl_seq* body;
4201 asdl_seq* orelse;
4202
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004203 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004204 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004205 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004206 if (tmp == NULL) goto failed;
4207 res = obj2ast_expr(tmp, &test, arena);
4208 if (res != 0) goto failed;
4209 Py_XDECREF(tmp);
4210 tmp = NULL;
4211 } else {
4212 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
4213 return 1;
4214 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004215 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004216 int res;
4217 Py_ssize_t len;
4218 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004219 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004220 if (tmp == NULL) goto failed;
4221 if (!PyList_Check(tmp)) {
4222 PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4223 goto failed;
4224 }
4225 len = PyList_GET_SIZE(tmp);
4226 body = asdl_seq_new(len, arena);
4227 if (body == NULL) goto failed;
4228 for (i = 0; i < len; i++) {
4229 stmt_ty value;
4230 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4231 if (res != 0) goto failed;
4232 asdl_seq_SET(body, i, value);
4233 }
4234 Py_XDECREF(tmp);
4235 tmp = NULL;
4236 } else {
4237 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
4238 return 1;
4239 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004240 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004241 int res;
4242 Py_ssize_t len;
4243 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004244 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004245 if (tmp == NULL) goto failed;
4246 if (!PyList_Check(tmp)) {
4247 PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4248 goto failed;
4249 }
4250 len = PyList_GET_SIZE(tmp);
4251 orelse = asdl_seq_new(len, arena);
4252 if (orelse == NULL) goto failed;
4253 for (i = 0; i < len; i++) {
4254 stmt_ty value;
4255 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4256 if (res != 0) goto failed;
4257 asdl_seq_SET(orelse, i, value);
4258 }
4259 Py_XDECREF(tmp);
4260 tmp = NULL;
4261 } else {
4262 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
4263 return 1;
4264 }
4265 *out = While(test, body, orelse, lineno, col_offset, arena);
4266 if (*out == NULL) goto failed;
4267 return 0;
4268 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004269 isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
4270 if (isinstance == -1) {
4271 return 1;
4272 }
4273 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004274 expr_ty test;
4275 asdl_seq* body;
4276 asdl_seq* orelse;
4277
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004278 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004279 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004280 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004281 if (tmp == NULL) goto failed;
4282 res = obj2ast_expr(tmp, &test, arena);
4283 if (res != 0) goto failed;
4284 Py_XDECREF(tmp);
4285 tmp = NULL;
4286 } else {
4287 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
4288 return 1;
4289 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004290 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004291 int res;
4292 Py_ssize_t len;
4293 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004294 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004295 if (tmp == NULL) goto failed;
4296 if (!PyList_Check(tmp)) {
4297 PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4298 goto failed;
4299 }
4300 len = PyList_GET_SIZE(tmp);
4301 body = asdl_seq_new(len, arena);
4302 if (body == NULL) goto failed;
4303 for (i = 0; i < len; i++) {
4304 stmt_ty value;
4305 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4306 if (res != 0) goto failed;
4307 asdl_seq_SET(body, i, value);
4308 }
4309 Py_XDECREF(tmp);
4310 tmp = NULL;
4311 } else {
4312 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
4313 return 1;
4314 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004315 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004316 int res;
4317 Py_ssize_t len;
4318 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004319 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004320 if (tmp == NULL) goto failed;
4321 if (!PyList_Check(tmp)) {
4322 PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4323 goto failed;
4324 }
4325 len = PyList_GET_SIZE(tmp);
4326 orelse = asdl_seq_new(len, arena);
4327 if (orelse == NULL) goto failed;
4328 for (i = 0; i < len; i++) {
4329 stmt_ty value;
4330 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4331 if (res != 0) goto failed;
4332 asdl_seq_SET(orelse, i, value);
4333 }
4334 Py_XDECREF(tmp);
4335 tmp = NULL;
4336 } else {
4337 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
4338 return 1;
4339 }
4340 *out = If(test, body, orelse, lineno, col_offset, arena);
4341 if (*out == NULL) goto failed;
4342 return 0;
4343 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004344 isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
4345 if (isinstance == -1) {
4346 return 1;
4347 }
4348 if (isinstance) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004349 asdl_seq* items;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004350 asdl_seq* body;
4351
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004352 if (_PyObject_HasAttrId(obj, &PyId_items)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004353 int res;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004354 Py_ssize_t len;
4355 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004356 tmp = _PyObject_GetAttrId(obj, &PyId_items);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004357 if (tmp == NULL) goto failed;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004358 if (!PyList_Check(tmp)) {
4359 PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4360 goto failed;
4361 }
4362 len = PyList_GET_SIZE(tmp);
4363 items = asdl_seq_new(len, arena);
4364 if (items == NULL) goto failed;
4365 for (i = 0; i < len; i++) {
4366 withitem_ty value;
4367 res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena);
4368 if (res != 0) goto failed;
4369 asdl_seq_SET(items, i, value);
4370 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004371 Py_XDECREF(tmp);
4372 tmp = NULL;
4373 } else {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004374 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004375 return 1;
4376 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004377 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004378 int res;
4379 Py_ssize_t len;
4380 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004381 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004382 if (tmp == NULL) goto failed;
4383 if (!PyList_Check(tmp)) {
4384 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4385 goto failed;
4386 }
4387 len = PyList_GET_SIZE(tmp);
4388 body = asdl_seq_new(len, arena);
4389 if (body == NULL) goto failed;
4390 for (i = 0; i < len; i++) {
4391 stmt_ty value;
4392 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4393 if (res != 0) goto failed;
4394 asdl_seq_SET(body, i, value);
4395 }
4396 Py_XDECREF(tmp);
4397 tmp = NULL;
4398 } else {
4399 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
4400 return 1;
4401 }
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004402 *out = With(items, body, lineno, col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004403 if (*out == NULL) goto failed;
4404 return 0;
4405 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004406 isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
4407 if (isinstance == -1) {
4408 return 1;
4409 }
4410 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004411 expr_ty exc;
4412 expr_ty cause;
4413
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004414 if (_PyObject_HasAttrId(obj, &PyId_exc)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004415 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004416 tmp = _PyObject_GetAttrId(obj, &PyId_exc);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004417 if (tmp == NULL) goto failed;
4418 res = obj2ast_expr(tmp, &exc, arena);
4419 if (res != 0) goto failed;
4420 Py_XDECREF(tmp);
4421 tmp = NULL;
4422 } else {
4423 exc = NULL;
4424 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004425 if (_PyObject_HasAttrId(obj, &PyId_cause)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004426 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004427 tmp = _PyObject_GetAttrId(obj, &PyId_cause);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004428 if (tmp == NULL) goto failed;
4429 res = obj2ast_expr(tmp, &cause, arena);
4430 if (res != 0) goto failed;
4431 Py_XDECREF(tmp);
4432 tmp = NULL;
4433 } else {
4434 cause = NULL;
4435 }
4436 *out = Raise(exc, cause, lineno, col_offset, arena);
4437 if (*out == NULL) goto failed;
4438 return 0;
4439 }
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004440 isinstance = PyObject_IsInstance(obj, (PyObject*)Try_type);
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004441 if (isinstance == -1) {
4442 return 1;
4443 }
4444 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004445 asdl_seq* body;
4446 asdl_seq* handlers;
4447 asdl_seq* orelse;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004448 asdl_seq* finalbody;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004449
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004450 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004451 int res;
4452 Py_ssize_t len;
4453 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004454 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004455 if (tmp == NULL) goto failed;
4456 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004457 PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004458 goto failed;
4459 }
4460 len = PyList_GET_SIZE(tmp);
4461 body = asdl_seq_new(len, arena);
4462 if (body == NULL) goto failed;
4463 for (i = 0; i < len; i++) {
4464 stmt_ty value;
4465 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4466 if (res != 0) goto failed;
4467 asdl_seq_SET(body, i, value);
4468 }
4469 Py_XDECREF(tmp);
4470 tmp = NULL;
4471 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004472 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004473 return 1;
4474 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004475 if (_PyObject_HasAttrId(obj, &PyId_handlers)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004476 int res;
4477 Py_ssize_t len;
4478 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004479 tmp = _PyObject_GetAttrId(obj, &PyId_handlers);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004480 if (tmp == NULL) goto failed;
4481 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004482 PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004483 goto failed;
4484 }
4485 len = PyList_GET_SIZE(tmp);
4486 handlers = asdl_seq_new(len, arena);
4487 if (handlers == NULL) goto failed;
4488 for (i = 0; i < len; i++) {
4489 excepthandler_ty value;
4490 res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
4491 if (res != 0) goto failed;
4492 asdl_seq_SET(handlers, i, value);
4493 }
4494 Py_XDECREF(tmp);
4495 tmp = NULL;
4496 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004497 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004498 return 1;
4499 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004500 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004501 int res;
4502 Py_ssize_t len;
4503 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004504 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004505 if (tmp == NULL) goto failed;
4506 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004507 PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004508 goto failed;
4509 }
4510 len = PyList_GET_SIZE(tmp);
4511 orelse = asdl_seq_new(len, arena);
4512 if (orelse == NULL) goto failed;
4513 for (i = 0; i < len; i++) {
4514 stmt_ty value;
4515 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4516 if (res != 0) goto failed;
4517 asdl_seq_SET(orelse, i, value);
4518 }
4519 Py_XDECREF(tmp);
4520 tmp = NULL;
4521 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004522 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004523 return 1;
4524 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004525 if (_PyObject_HasAttrId(obj, &PyId_finalbody)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004526 int res;
4527 Py_ssize_t len;
4528 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004529 tmp = _PyObject_GetAttrId(obj, &PyId_finalbody);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004530 if (tmp == NULL) goto failed;
4531 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004532 PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004533 goto failed;
4534 }
4535 len = PyList_GET_SIZE(tmp);
4536 finalbody = asdl_seq_new(len, arena);
4537 if (finalbody == NULL) goto failed;
4538 for (i = 0; i < len; i++) {
4539 stmt_ty value;
4540 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4541 if (res != 0) goto failed;
4542 asdl_seq_SET(finalbody, i, value);
4543 }
4544 Py_XDECREF(tmp);
4545 tmp = NULL;
4546 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004547 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004548 return 1;
4549 }
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004550 *out = Try(body, handlers, orelse, finalbody, lineno,
4551 col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004552 if (*out == NULL) goto failed;
4553 return 0;
4554 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004555 isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
4556 if (isinstance == -1) {
4557 return 1;
4558 }
4559 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004560 expr_ty test;
4561 expr_ty msg;
4562
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004563 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004564 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004565 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004566 if (tmp == NULL) goto failed;
4567 res = obj2ast_expr(tmp, &test, arena);
4568 if (res != 0) goto failed;
4569 Py_XDECREF(tmp);
4570 tmp = NULL;
4571 } else {
4572 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
4573 return 1;
4574 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004575 if (_PyObject_HasAttrId(obj, &PyId_msg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004576 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004577 tmp = _PyObject_GetAttrId(obj, &PyId_msg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004578 if (tmp == NULL) goto failed;
4579 res = obj2ast_expr(tmp, &msg, arena);
4580 if (res != 0) goto failed;
4581 Py_XDECREF(tmp);
4582 tmp = NULL;
4583 } else {
4584 msg = NULL;
4585 }
4586 *out = Assert(test, msg, lineno, col_offset, arena);
4587 if (*out == NULL) goto failed;
4588 return 0;
4589 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004590 isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
4591 if (isinstance == -1) {
4592 return 1;
4593 }
4594 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004595 asdl_seq* names;
4596
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004597 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004598 int res;
4599 Py_ssize_t len;
4600 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004601 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004602 if (tmp == NULL) goto failed;
4603 if (!PyList_Check(tmp)) {
4604 PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4605 goto failed;
4606 }
4607 len = PyList_GET_SIZE(tmp);
4608 names = asdl_seq_new(len, arena);
4609 if (names == NULL) goto failed;
4610 for (i = 0; i < len; i++) {
4611 alias_ty value;
4612 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4613 if (res != 0) goto failed;
4614 asdl_seq_SET(names, i, value);
4615 }
4616 Py_XDECREF(tmp);
4617 tmp = NULL;
4618 } else {
4619 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
4620 return 1;
4621 }
4622 *out = Import(names, lineno, col_offset, arena);
4623 if (*out == NULL) goto failed;
4624 return 0;
4625 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004626 isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
4627 if (isinstance == -1) {
4628 return 1;
4629 }
4630 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004631 identifier module;
4632 asdl_seq* names;
4633 int level;
4634
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004635 if (_PyObject_HasAttrId(obj, &PyId_module)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004636 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004637 tmp = _PyObject_GetAttrId(obj, &PyId_module);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004638 if (tmp == NULL) goto failed;
4639 res = obj2ast_identifier(tmp, &module, arena);
4640 if (res != 0) goto failed;
4641 Py_XDECREF(tmp);
4642 tmp = NULL;
4643 } else {
Benjamin Peterson78565b22009-06-28 19:19:51 +00004644 module = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004645 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004646 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004647 int res;
4648 Py_ssize_t len;
4649 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004650 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004651 if (tmp == NULL) goto failed;
4652 if (!PyList_Check(tmp)) {
4653 PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4654 goto failed;
4655 }
4656 len = PyList_GET_SIZE(tmp);
4657 names = asdl_seq_new(len, arena);
4658 if (names == NULL) goto failed;
4659 for (i = 0; i < len; i++) {
4660 alias_ty value;
4661 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4662 if (res != 0) goto failed;
4663 asdl_seq_SET(names, i, value);
4664 }
4665 Py_XDECREF(tmp);
4666 tmp = NULL;
4667 } else {
4668 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
4669 return 1;
4670 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004671 if (_PyObject_HasAttrId(obj, &PyId_level)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004672 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004673 tmp = _PyObject_GetAttrId(obj, &PyId_level);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004674 if (tmp == NULL) goto failed;
4675 res = obj2ast_int(tmp, &level, arena);
4676 if (res != 0) goto failed;
4677 Py_XDECREF(tmp);
4678 tmp = NULL;
4679 } else {
4680 level = 0;
4681 }
4682 *out = ImportFrom(module, names, level, lineno, col_offset,
4683 arena);
4684 if (*out == NULL) goto failed;
4685 return 0;
4686 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004687 isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
4688 if (isinstance == -1) {
4689 return 1;
4690 }
4691 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004692 asdl_seq* names;
4693
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004694 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004695 int res;
4696 Py_ssize_t len;
4697 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004698 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004699 if (tmp == NULL) goto failed;
4700 if (!PyList_Check(tmp)) {
4701 PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4702 goto failed;
4703 }
4704 len = PyList_GET_SIZE(tmp);
4705 names = asdl_seq_new(len, arena);
4706 if (names == NULL) goto failed;
4707 for (i = 0; i < len; i++) {
4708 identifier value;
4709 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
4710 if (res != 0) goto failed;
4711 asdl_seq_SET(names, i, value);
4712 }
4713 Py_XDECREF(tmp);
4714 tmp = NULL;
4715 } else {
4716 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
4717 return 1;
4718 }
4719 *out = Global(names, lineno, col_offset, arena);
4720 if (*out == NULL) goto failed;
4721 return 0;
4722 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004723 isinstance = PyObject_IsInstance(obj, (PyObject*)Nonlocal_type);
4724 if (isinstance == -1) {
4725 return 1;
4726 }
4727 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004728 asdl_seq* names;
4729
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004730 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004731 int res;
4732 Py_ssize_t len;
4733 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004734 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004735 if (tmp == NULL) goto failed;
4736 if (!PyList_Check(tmp)) {
4737 PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4738 goto failed;
4739 }
4740 len = PyList_GET_SIZE(tmp);
4741 names = asdl_seq_new(len, arena);
4742 if (names == NULL) goto failed;
4743 for (i = 0; i < len; i++) {
4744 identifier value;
4745 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
4746 if (res != 0) goto failed;
4747 asdl_seq_SET(names, i, value);
4748 }
4749 Py_XDECREF(tmp);
4750 tmp = NULL;
4751 } else {
4752 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
4753 return 1;
4754 }
4755 *out = Nonlocal(names, lineno, col_offset, arena);
4756 if (*out == NULL) goto failed;
4757 return 0;
4758 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004759 isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
4760 if (isinstance == -1) {
4761 return 1;
4762 }
4763 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004764 expr_ty value;
4765
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004766 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004767 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004768 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004769 if (tmp == NULL) goto failed;
4770 res = obj2ast_expr(tmp, &value, arena);
4771 if (res != 0) goto failed;
4772 Py_XDECREF(tmp);
4773 tmp = NULL;
4774 } else {
4775 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
4776 return 1;
4777 }
4778 *out = Expr(value, lineno, col_offset, arena);
4779 if (*out == NULL) goto failed;
4780 return 0;
4781 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004782 isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
4783 if (isinstance == -1) {
4784 return 1;
4785 }
4786 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004787
4788 *out = Pass(lineno, col_offset, arena);
4789 if (*out == NULL) goto failed;
4790 return 0;
4791 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004792 isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
4793 if (isinstance == -1) {
4794 return 1;
4795 }
4796 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004797
4798 *out = Break(lineno, col_offset, arena);
4799 if (*out == NULL) goto failed;
4800 return 0;
4801 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004802 isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
4803 if (isinstance == -1) {
4804 return 1;
4805 }
4806 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004807
4808 *out = Continue(lineno, col_offset, arena);
4809 if (*out == NULL) goto failed;
4810 return 0;
4811 }
4812
Benjamin Peterson5b066812010-11-20 01:38:49 +00004813 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
4814 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00004815 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004816 return 1;
4817}
4818
4819int
4820obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
4821{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004822 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004823
Benjamin Petersond8f65972010-11-20 04:31:07 +00004824 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004825 int lineno;
4826 int col_offset;
4827
4828 if (obj == Py_None) {
4829 *out = NULL;
4830 return 0;
4831 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004832 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004833 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004834 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004835 if (tmp == NULL) goto failed;
4836 res = obj2ast_int(tmp, &lineno, arena);
4837 if (res != 0) goto failed;
4838 Py_XDECREF(tmp);
4839 tmp = NULL;
4840 } else {
4841 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
4842 return 1;
4843 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004844 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004845 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004846 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004847 if (tmp == NULL) goto failed;
4848 res = obj2ast_int(tmp, &col_offset, arena);
4849 if (res != 0) goto failed;
4850 Py_XDECREF(tmp);
4851 tmp = NULL;
4852 } else {
4853 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
4854 return 1;
4855 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004856 isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
4857 if (isinstance == -1) {
4858 return 1;
4859 }
4860 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004861 boolop_ty op;
4862 asdl_seq* values;
4863
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004864 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004865 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004866 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004867 if (tmp == NULL) goto failed;
4868 res = obj2ast_boolop(tmp, &op, arena);
4869 if (res != 0) goto failed;
4870 Py_XDECREF(tmp);
4871 tmp = NULL;
4872 } else {
4873 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
4874 return 1;
4875 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004876 if (_PyObject_HasAttrId(obj, &PyId_values)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004877 int res;
4878 Py_ssize_t len;
4879 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004880 tmp = _PyObject_GetAttrId(obj, &PyId_values);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004881 if (tmp == NULL) goto failed;
4882 if (!PyList_Check(tmp)) {
4883 PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4884 goto failed;
4885 }
4886 len = PyList_GET_SIZE(tmp);
4887 values = asdl_seq_new(len, arena);
4888 if (values == NULL) goto failed;
4889 for (i = 0; i < len; i++) {
4890 expr_ty value;
4891 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4892 if (res != 0) goto failed;
4893 asdl_seq_SET(values, i, value);
4894 }
4895 Py_XDECREF(tmp);
4896 tmp = NULL;
4897 } else {
4898 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
4899 return 1;
4900 }
4901 *out = BoolOp(op, values, lineno, col_offset, arena);
4902 if (*out == NULL) goto failed;
4903 return 0;
4904 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004905 isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
4906 if (isinstance == -1) {
4907 return 1;
4908 }
4909 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004910 expr_ty left;
4911 operator_ty op;
4912 expr_ty right;
4913
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004914 if (_PyObject_HasAttrId(obj, &PyId_left)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004915 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004916 tmp = _PyObject_GetAttrId(obj, &PyId_left);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004917 if (tmp == NULL) goto failed;
4918 res = obj2ast_expr(tmp, &left, arena);
4919 if (res != 0) goto failed;
4920 Py_XDECREF(tmp);
4921 tmp = NULL;
4922 } else {
4923 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
4924 return 1;
4925 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004926 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004927 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004928 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004929 if (tmp == NULL) goto failed;
4930 res = obj2ast_operator(tmp, &op, arena);
4931 if (res != 0) goto failed;
4932 Py_XDECREF(tmp);
4933 tmp = NULL;
4934 } else {
4935 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
4936 return 1;
4937 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004938 if (_PyObject_HasAttrId(obj, &PyId_right)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004939 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004940 tmp = _PyObject_GetAttrId(obj, &PyId_right);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004941 if (tmp == NULL) goto failed;
4942 res = obj2ast_expr(tmp, &right, arena);
4943 if (res != 0) goto failed;
4944 Py_XDECREF(tmp);
4945 tmp = NULL;
4946 } else {
4947 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
4948 return 1;
4949 }
4950 *out = BinOp(left, op, right, lineno, col_offset, arena);
4951 if (*out == NULL) goto failed;
4952 return 0;
4953 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004954 isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
4955 if (isinstance == -1) {
4956 return 1;
4957 }
4958 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004959 unaryop_ty op;
4960 expr_ty operand;
4961
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004962 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004963 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004964 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004965 if (tmp == NULL) goto failed;
4966 res = obj2ast_unaryop(tmp, &op, arena);
4967 if (res != 0) goto failed;
4968 Py_XDECREF(tmp);
4969 tmp = NULL;
4970 } else {
4971 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
4972 return 1;
4973 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004974 if (_PyObject_HasAttrId(obj, &PyId_operand)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004975 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004976 tmp = _PyObject_GetAttrId(obj, &PyId_operand);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004977 if (tmp == NULL) goto failed;
4978 res = obj2ast_expr(tmp, &operand, arena);
4979 if (res != 0) goto failed;
4980 Py_XDECREF(tmp);
4981 tmp = NULL;
4982 } else {
4983 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
4984 return 1;
4985 }
4986 *out = UnaryOp(op, operand, lineno, col_offset, arena);
4987 if (*out == NULL) goto failed;
4988 return 0;
4989 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004990 isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
4991 if (isinstance == -1) {
4992 return 1;
4993 }
4994 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004995 arguments_ty args;
4996 expr_ty body;
4997
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004998 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004999 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005000 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005001 if (tmp == NULL) goto failed;
5002 res = obj2ast_arguments(tmp, &args, arena);
5003 if (res != 0) goto failed;
5004 Py_XDECREF(tmp);
5005 tmp = NULL;
5006 } else {
5007 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
5008 return 1;
5009 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005010 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005011 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005012 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005013 if (tmp == NULL) goto failed;
5014 res = obj2ast_expr(tmp, &body, arena);
5015 if (res != 0) goto failed;
5016 Py_XDECREF(tmp);
5017 tmp = NULL;
5018 } else {
5019 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
5020 return 1;
5021 }
5022 *out = Lambda(args, body, lineno, col_offset, arena);
5023 if (*out == NULL) goto failed;
5024 return 0;
5025 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005026 isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
5027 if (isinstance == -1) {
5028 return 1;
5029 }
5030 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005031 expr_ty test;
5032 expr_ty body;
5033 expr_ty orelse;
5034
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005035 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005036 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005037 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005038 if (tmp == NULL) goto failed;
5039 res = obj2ast_expr(tmp, &test, arena);
5040 if (res != 0) goto failed;
5041 Py_XDECREF(tmp);
5042 tmp = NULL;
5043 } else {
5044 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
5045 return 1;
5046 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005047 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005048 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005049 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005050 if (tmp == NULL) goto failed;
5051 res = obj2ast_expr(tmp, &body, arena);
5052 if (res != 0) goto failed;
5053 Py_XDECREF(tmp);
5054 tmp = NULL;
5055 } else {
5056 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
5057 return 1;
5058 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005059 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005060 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005061 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005062 if (tmp == NULL) goto failed;
5063 res = obj2ast_expr(tmp, &orelse, arena);
5064 if (res != 0) goto failed;
5065 Py_XDECREF(tmp);
5066 tmp = NULL;
5067 } else {
5068 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
5069 return 1;
5070 }
5071 *out = IfExp(test, body, orelse, lineno, col_offset, arena);
5072 if (*out == NULL) goto failed;
5073 return 0;
5074 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005075 isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
5076 if (isinstance == -1) {
5077 return 1;
5078 }
5079 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005080 asdl_seq* keys;
5081 asdl_seq* values;
5082
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005083 if (_PyObject_HasAttrId(obj, &PyId_keys)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005084 int res;
5085 Py_ssize_t len;
5086 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005087 tmp = _PyObject_GetAttrId(obj, &PyId_keys);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005088 if (tmp == NULL) goto failed;
5089 if (!PyList_Check(tmp)) {
5090 PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5091 goto failed;
5092 }
5093 len = PyList_GET_SIZE(tmp);
5094 keys = asdl_seq_new(len, arena);
5095 if (keys == NULL) goto failed;
5096 for (i = 0; i < len; i++) {
5097 expr_ty value;
5098 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5099 if (res != 0) goto failed;
5100 asdl_seq_SET(keys, i, value);
5101 }
5102 Py_XDECREF(tmp);
5103 tmp = NULL;
5104 } else {
5105 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
5106 return 1;
5107 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005108 if (_PyObject_HasAttrId(obj, &PyId_values)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005109 int res;
5110 Py_ssize_t len;
5111 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005112 tmp = _PyObject_GetAttrId(obj, &PyId_values);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005113 if (tmp == NULL) goto failed;
5114 if (!PyList_Check(tmp)) {
5115 PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5116 goto failed;
5117 }
5118 len = PyList_GET_SIZE(tmp);
5119 values = asdl_seq_new(len, arena);
5120 if (values == NULL) goto failed;
5121 for (i = 0; i < len; i++) {
5122 expr_ty value;
5123 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5124 if (res != 0) goto failed;
5125 asdl_seq_SET(values, i, value);
5126 }
5127 Py_XDECREF(tmp);
5128 tmp = NULL;
5129 } else {
5130 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
5131 return 1;
5132 }
5133 *out = Dict(keys, values, lineno, col_offset, arena);
5134 if (*out == NULL) goto failed;
5135 return 0;
5136 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005137 isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
5138 if (isinstance == -1) {
5139 return 1;
5140 }
5141 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005142 asdl_seq* elts;
5143
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005144 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005145 int res;
5146 Py_ssize_t len;
5147 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005148 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005149 if (tmp == NULL) goto failed;
5150 if (!PyList_Check(tmp)) {
5151 PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5152 goto failed;
5153 }
5154 len = PyList_GET_SIZE(tmp);
5155 elts = asdl_seq_new(len, arena);
5156 if (elts == NULL) goto failed;
5157 for (i = 0; i < len; i++) {
5158 expr_ty value;
5159 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5160 if (res != 0) goto failed;
5161 asdl_seq_SET(elts, i, value);
5162 }
5163 Py_XDECREF(tmp);
5164 tmp = NULL;
5165 } else {
5166 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
5167 return 1;
5168 }
5169 *out = Set(elts, lineno, col_offset, arena);
5170 if (*out == NULL) goto failed;
5171 return 0;
5172 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005173 isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
5174 if (isinstance == -1) {
5175 return 1;
5176 }
5177 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005178 expr_ty elt;
5179 asdl_seq* generators;
5180
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005181 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005182 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005183 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005184 if (tmp == NULL) goto failed;
5185 res = obj2ast_expr(tmp, &elt, arena);
5186 if (res != 0) goto failed;
5187 Py_XDECREF(tmp);
5188 tmp = NULL;
5189 } else {
5190 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
5191 return 1;
5192 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005193 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005194 int res;
5195 Py_ssize_t len;
5196 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005197 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005198 if (tmp == NULL) goto failed;
5199 if (!PyList_Check(tmp)) {
5200 PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5201 goto failed;
5202 }
5203 len = PyList_GET_SIZE(tmp);
5204 generators = asdl_seq_new(len, arena);
5205 if (generators == NULL) goto failed;
5206 for (i = 0; i < len; i++) {
5207 comprehension_ty value;
5208 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5209 if (res != 0) goto failed;
5210 asdl_seq_SET(generators, i, value);
5211 }
5212 Py_XDECREF(tmp);
5213 tmp = NULL;
5214 } else {
5215 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
5216 return 1;
5217 }
5218 *out = ListComp(elt, generators, lineno, col_offset, arena);
5219 if (*out == NULL) goto failed;
5220 return 0;
5221 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005222 isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
5223 if (isinstance == -1) {
5224 return 1;
5225 }
5226 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005227 expr_ty elt;
5228 asdl_seq* generators;
5229
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005230 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005231 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005232 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005233 if (tmp == NULL) goto failed;
5234 res = obj2ast_expr(tmp, &elt, arena);
5235 if (res != 0) goto failed;
5236 Py_XDECREF(tmp);
5237 tmp = NULL;
5238 } else {
5239 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
5240 return 1;
5241 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005242 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005243 int res;
5244 Py_ssize_t len;
5245 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005246 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005247 if (tmp == NULL) goto failed;
5248 if (!PyList_Check(tmp)) {
5249 PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5250 goto failed;
5251 }
5252 len = PyList_GET_SIZE(tmp);
5253 generators = asdl_seq_new(len, arena);
5254 if (generators == NULL) goto failed;
5255 for (i = 0; i < len; i++) {
5256 comprehension_ty value;
5257 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5258 if (res != 0) goto failed;
5259 asdl_seq_SET(generators, i, value);
5260 }
5261 Py_XDECREF(tmp);
5262 tmp = NULL;
5263 } else {
5264 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
5265 return 1;
5266 }
5267 *out = SetComp(elt, generators, lineno, col_offset, arena);
5268 if (*out == NULL) goto failed;
5269 return 0;
5270 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005271 isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
5272 if (isinstance == -1) {
5273 return 1;
5274 }
5275 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005276 expr_ty key;
5277 expr_ty value;
5278 asdl_seq* generators;
5279
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005280 if (_PyObject_HasAttrId(obj, &PyId_key)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005281 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005282 tmp = _PyObject_GetAttrId(obj, &PyId_key);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005283 if (tmp == NULL) goto failed;
5284 res = obj2ast_expr(tmp, &key, arena);
5285 if (res != 0) goto failed;
5286 Py_XDECREF(tmp);
5287 tmp = NULL;
5288 } else {
5289 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
5290 return 1;
5291 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005292 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005293 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005294 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005295 if (tmp == NULL) goto failed;
5296 res = obj2ast_expr(tmp, &value, arena);
5297 if (res != 0) goto failed;
5298 Py_XDECREF(tmp);
5299 tmp = NULL;
5300 } else {
5301 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
5302 return 1;
5303 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005304 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005305 int res;
5306 Py_ssize_t len;
5307 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005308 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005309 if (tmp == NULL) goto failed;
5310 if (!PyList_Check(tmp)) {
5311 PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5312 goto failed;
5313 }
5314 len = PyList_GET_SIZE(tmp);
5315 generators = asdl_seq_new(len, arena);
5316 if (generators == NULL) goto failed;
5317 for (i = 0; i < len; i++) {
5318 comprehension_ty value;
5319 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5320 if (res != 0) goto failed;
5321 asdl_seq_SET(generators, i, value);
5322 }
5323 Py_XDECREF(tmp);
5324 tmp = NULL;
5325 } else {
5326 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
5327 return 1;
5328 }
5329 *out = DictComp(key, value, generators, lineno, col_offset,
5330 arena);
5331 if (*out == NULL) goto failed;
5332 return 0;
5333 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005334 isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
5335 if (isinstance == -1) {
5336 return 1;
5337 }
5338 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005339 expr_ty elt;
5340 asdl_seq* generators;
5341
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005342 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005343 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005344 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005345 if (tmp == NULL) goto failed;
5346 res = obj2ast_expr(tmp, &elt, arena);
5347 if (res != 0) goto failed;
5348 Py_XDECREF(tmp);
5349 tmp = NULL;
5350 } else {
5351 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
5352 return 1;
5353 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005354 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005355 int res;
5356 Py_ssize_t len;
5357 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005358 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005359 if (tmp == NULL) goto failed;
5360 if (!PyList_Check(tmp)) {
5361 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5362 goto failed;
5363 }
5364 len = PyList_GET_SIZE(tmp);
5365 generators = asdl_seq_new(len, arena);
5366 if (generators == NULL) goto failed;
5367 for (i = 0; i < len; i++) {
5368 comprehension_ty value;
5369 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5370 if (res != 0) goto failed;
5371 asdl_seq_SET(generators, i, value);
5372 }
5373 Py_XDECREF(tmp);
5374 tmp = NULL;
5375 } else {
5376 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
5377 return 1;
5378 }
5379 *out = GeneratorExp(elt, generators, lineno, col_offset, arena);
5380 if (*out == NULL) goto failed;
5381 return 0;
5382 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005383 isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
5384 if (isinstance == -1) {
5385 return 1;
5386 }
5387 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005388 expr_ty value;
5389
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005390 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005391 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005392 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005393 if (tmp == NULL) goto failed;
5394 res = obj2ast_expr(tmp, &value, arena);
5395 if (res != 0) goto failed;
5396 Py_XDECREF(tmp);
5397 tmp = NULL;
5398 } else {
5399 value = NULL;
5400 }
Benjamin Peterson527c6222012-01-14 08:58:23 -05005401 *out = Yield(value, lineno, col_offset, arena);
5402 if (*out == NULL) goto failed;
5403 return 0;
5404 }
5405 isinstance = PyObject_IsInstance(obj, (PyObject*)YieldFrom_type);
5406 if (isinstance == -1) {
5407 return 1;
5408 }
5409 if (isinstance) {
5410 expr_ty value;
5411
5412 if (_PyObject_HasAttrId(obj, &PyId_value)) {
5413 int res;
5414 tmp = _PyObject_GetAttrId(obj, &PyId_value);
5415 if (tmp == NULL) goto failed;
5416 res = obj2ast_expr(tmp, &value, arena);
5417 if (res != 0) goto failed;
5418 Py_XDECREF(tmp);
5419 tmp = NULL;
5420 } else {
5421 value = NULL;
5422 }
5423 *out = YieldFrom(value, lineno, col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005424 if (*out == NULL) goto failed;
5425 return 0;
5426 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005427 isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
5428 if (isinstance == -1) {
5429 return 1;
5430 }
5431 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005432 expr_ty left;
5433 asdl_int_seq* ops;
5434 asdl_seq* comparators;
5435
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005436 if (_PyObject_HasAttrId(obj, &PyId_left)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005437 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005438 tmp = _PyObject_GetAttrId(obj, &PyId_left);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005439 if (tmp == NULL) goto failed;
5440 res = obj2ast_expr(tmp, &left, arena);
5441 if (res != 0) goto failed;
5442 Py_XDECREF(tmp);
5443 tmp = NULL;
5444 } else {
5445 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
5446 return 1;
5447 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005448 if (_PyObject_HasAttrId(obj, &PyId_ops)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005449 int res;
5450 Py_ssize_t len;
5451 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005452 tmp = _PyObject_GetAttrId(obj, &PyId_ops);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005453 if (tmp == NULL) goto failed;
5454 if (!PyList_Check(tmp)) {
5455 PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5456 goto failed;
5457 }
5458 len = PyList_GET_SIZE(tmp);
5459 ops = asdl_int_seq_new(len, arena);
5460 if (ops == NULL) goto failed;
5461 for (i = 0; i < len; i++) {
5462 cmpop_ty value;
5463 res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
5464 if (res != 0) goto failed;
5465 asdl_seq_SET(ops, i, value);
5466 }
5467 Py_XDECREF(tmp);
5468 tmp = NULL;
5469 } else {
5470 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
5471 return 1;
5472 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005473 if (_PyObject_HasAttrId(obj, &PyId_comparators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005474 int res;
5475 Py_ssize_t len;
5476 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005477 tmp = _PyObject_GetAttrId(obj, &PyId_comparators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005478 if (tmp == NULL) goto failed;
5479 if (!PyList_Check(tmp)) {
5480 PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5481 goto failed;
5482 }
5483 len = PyList_GET_SIZE(tmp);
5484 comparators = asdl_seq_new(len, arena);
5485 if (comparators == NULL) goto failed;
5486 for (i = 0; i < len; i++) {
5487 expr_ty value;
5488 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5489 if (res != 0) goto failed;
5490 asdl_seq_SET(comparators, i, value);
5491 }
5492 Py_XDECREF(tmp);
5493 tmp = NULL;
5494 } else {
5495 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
5496 return 1;
5497 }
5498 *out = Compare(left, ops, comparators, lineno, col_offset,
5499 arena);
5500 if (*out == NULL) goto failed;
5501 return 0;
5502 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005503 isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
5504 if (isinstance == -1) {
5505 return 1;
5506 }
5507 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005508 expr_ty func;
5509 asdl_seq* args;
5510 asdl_seq* keywords;
5511 expr_ty starargs;
5512 expr_ty kwargs;
5513
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005514 if (_PyObject_HasAttrId(obj, &PyId_func)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005515 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005516 tmp = _PyObject_GetAttrId(obj, &PyId_func);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005517 if (tmp == NULL) goto failed;
5518 res = obj2ast_expr(tmp, &func, arena);
5519 if (res != 0) goto failed;
5520 Py_XDECREF(tmp);
5521 tmp = NULL;
5522 } else {
5523 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
5524 return 1;
5525 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005526 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005527 int res;
5528 Py_ssize_t len;
5529 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005530 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005531 if (tmp == NULL) goto failed;
5532 if (!PyList_Check(tmp)) {
5533 PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5534 goto failed;
5535 }
5536 len = PyList_GET_SIZE(tmp);
5537 args = asdl_seq_new(len, arena);
5538 if (args == NULL) goto failed;
5539 for (i = 0; i < len; i++) {
5540 expr_ty value;
5541 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5542 if (res != 0) goto failed;
5543 asdl_seq_SET(args, i, value);
5544 }
5545 Py_XDECREF(tmp);
5546 tmp = NULL;
5547 } else {
5548 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
5549 return 1;
5550 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005551 if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005552 int res;
5553 Py_ssize_t len;
5554 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005555 tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005556 if (tmp == NULL) goto failed;
5557 if (!PyList_Check(tmp)) {
5558 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5559 goto failed;
5560 }
5561 len = PyList_GET_SIZE(tmp);
5562 keywords = asdl_seq_new(len, arena);
5563 if (keywords == NULL) goto failed;
5564 for (i = 0; i < len; i++) {
5565 keyword_ty value;
5566 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
5567 if (res != 0) goto failed;
5568 asdl_seq_SET(keywords, i, value);
5569 }
5570 Py_XDECREF(tmp);
5571 tmp = NULL;
5572 } else {
5573 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
5574 return 1;
5575 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005576 if (_PyObject_HasAttrId(obj, &PyId_starargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005577 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005578 tmp = _PyObject_GetAttrId(obj, &PyId_starargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005579 if (tmp == NULL) goto failed;
5580 res = obj2ast_expr(tmp, &starargs, arena);
5581 if (res != 0) goto failed;
5582 Py_XDECREF(tmp);
5583 tmp = NULL;
5584 } else {
5585 starargs = NULL;
5586 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005587 if (_PyObject_HasAttrId(obj, &PyId_kwargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005588 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005589 tmp = _PyObject_GetAttrId(obj, &PyId_kwargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005590 if (tmp == NULL) goto failed;
5591 res = obj2ast_expr(tmp, &kwargs, arena);
5592 if (res != 0) goto failed;
5593 Py_XDECREF(tmp);
5594 tmp = NULL;
5595 } else {
5596 kwargs = NULL;
5597 }
5598 *out = Call(func, args, keywords, starargs, kwargs, lineno,
5599 col_offset, arena);
5600 if (*out == NULL) goto failed;
5601 return 0;
5602 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005603 isinstance = PyObject_IsInstance(obj, (PyObject*)Num_type);
5604 if (isinstance == -1) {
5605 return 1;
5606 }
5607 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005608 object n;
5609
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005610 if (_PyObject_HasAttrId(obj, &PyId_n)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005611 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005612 tmp = _PyObject_GetAttrId(obj, &PyId_n);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005613 if (tmp == NULL) goto failed;
5614 res = obj2ast_object(tmp, &n, arena);
5615 if (res != 0) goto failed;
5616 Py_XDECREF(tmp);
5617 tmp = NULL;
5618 } else {
5619 PyErr_SetString(PyExc_TypeError, "required field \"n\" missing from Num");
5620 return 1;
5621 }
5622 *out = Num(n, lineno, col_offset, arena);
5623 if (*out == NULL) goto failed;
5624 return 0;
5625 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005626 isinstance = PyObject_IsInstance(obj, (PyObject*)Str_type);
5627 if (isinstance == -1) {
5628 return 1;
5629 }
5630 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005631 string s;
5632
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005633 if (_PyObject_HasAttrId(obj, &PyId_s)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005634 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005635 tmp = _PyObject_GetAttrId(obj, &PyId_s);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005636 if (tmp == NULL) goto failed;
5637 res = obj2ast_string(tmp, &s, arena);
5638 if (res != 0) goto failed;
5639 Py_XDECREF(tmp);
5640 tmp = NULL;
5641 } else {
5642 PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Str");
5643 return 1;
5644 }
5645 *out = Str(s, lineno, col_offset, arena);
5646 if (*out == NULL) goto failed;
5647 return 0;
5648 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005649 isinstance = PyObject_IsInstance(obj, (PyObject*)Bytes_type);
5650 if (isinstance == -1) {
5651 return 1;
5652 }
5653 if (isinstance) {
Benjamin Petersone2498412011-08-09 16:08:39 -05005654 bytes s;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005655
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005656 if (_PyObject_HasAttrId(obj, &PyId_s)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005657 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005658 tmp = _PyObject_GetAttrId(obj, &PyId_s);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005659 if (tmp == NULL) goto failed;
Benjamin Petersone2498412011-08-09 16:08:39 -05005660 res = obj2ast_bytes(tmp, &s, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005661 if (res != 0) goto failed;
5662 Py_XDECREF(tmp);
5663 tmp = NULL;
5664 } else {
5665 PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Bytes");
5666 return 1;
5667 }
5668 *out = Bytes(s, lineno, col_offset, arena);
5669 if (*out == NULL) goto failed;
5670 return 0;
5671 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005672 isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type);
5673 if (isinstance == -1) {
5674 return 1;
5675 }
5676 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005677
5678 *out = Ellipsis(lineno, col_offset, arena);
5679 if (*out == NULL) goto failed;
5680 return 0;
5681 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005682 isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
5683 if (isinstance == -1) {
5684 return 1;
5685 }
5686 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005687 expr_ty value;
5688 identifier attr;
5689 expr_context_ty ctx;
5690
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005691 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005692 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005693 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005694 if (tmp == NULL) goto failed;
5695 res = obj2ast_expr(tmp, &value, arena);
5696 if (res != 0) goto failed;
5697 Py_XDECREF(tmp);
5698 tmp = NULL;
5699 } else {
5700 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
5701 return 1;
5702 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005703 if (_PyObject_HasAttrId(obj, &PyId_attr)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005704 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005705 tmp = _PyObject_GetAttrId(obj, &PyId_attr);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005706 if (tmp == NULL) goto failed;
5707 res = obj2ast_identifier(tmp, &attr, arena);
5708 if (res != 0) goto failed;
5709 Py_XDECREF(tmp);
5710 tmp = NULL;
5711 } else {
5712 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
5713 return 1;
5714 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005715 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005716 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005717 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005718 if (tmp == NULL) goto failed;
5719 res = obj2ast_expr_context(tmp, &ctx, arena);
5720 if (res != 0) goto failed;
5721 Py_XDECREF(tmp);
5722 tmp = NULL;
5723 } else {
5724 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
5725 return 1;
5726 }
5727 *out = Attribute(value, attr, ctx, lineno, col_offset, arena);
5728 if (*out == NULL) goto failed;
5729 return 0;
5730 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005731 isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
5732 if (isinstance == -1) {
5733 return 1;
5734 }
5735 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005736 expr_ty value;
5737 slice_ty slice;
5738 expr_context_ty ctx;
5739
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005740 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005741 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005742 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005743 if (tmp == NULL) goto failed;
5744 res = obj2ast_expr(tmp, &value, arena);
5745 if (res != 0) goto failed;
5746 Py_XDECREF(tmp);
5747 tmp = NULL;
5748 } else {
5749 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
5750 return 1;
5751 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005752 if (_PyObject_HasAttrId(obj, &PyId_slice)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005753 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005754 tmp = _PyObject_GetAttrId(obj, &PyId_slice);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005755 if (tmp == NULL) goto failed;
5756 res = obj2ast_slice(tmp, &slice, arena);
5757 if (res != 0) goto failed;
5758 Py_XDECREF(tmp);
5759 tmp = NULL;
5760 } else {
5761 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
5762 return 1;
5763 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005764 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005765 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005766 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005767 if (tmp == NULL) goto failed;
5768 res = obj2ast_expr_context(tmp, &ctx, arena);
5769 if (res != 0) goto failed;
5770 Py_XDECREF(tmp);
5771 tmp = NULL;
5772 } else {
5773 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
5774 return 1;
5775 }
5776 *out = Subscript(value, slice, ctx, lineno, col_offset, arena);
5777 if (*out == NULL) goto failed;
5778 return 0;
5779 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005780 isinstance = PyObject_IsInstance(obj, (PyObject*)Starred_type);
5781 if (isinstance == -1) {
5782 return 1;
5783 }
5784 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005785 expr_ty value;
5786 expr_context_ty ctx;
5787
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005788 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005789 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005790 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005791 if (tmp == NULL) goto failed;
5792 res = obj2ast_expr(tmp, &value, arena);
5793 if (res != 0) goto failed;
5794 Py_XDECREF(tmp);
5795 tmp = NULL;
5796 } else {
5797 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
5798 return 1;
5799 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005800 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005801 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005802 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005803 if (tmp == NULL) goto failed;
5804 res = obj2ast_expr_context(tmp, &ctx, arena);
5805 if (res != 0) goto failed;
5806 Py_XDECREF(tmp);
5807 tmp = NULL;
5808 } else {
5809 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
5810 return 1;
5811 }
5812 *out = Starred(value, ctx, lineno, col_offset, arena);
5813 if (*out == NULL) goto failed;
5814 return 0;
5815 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005816 isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
5817 if (isinstance == -1) {
5818 return 1;
5819 }
5820 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005821 identifier id;
5822 expr_context_ty ctx;
5823
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005824 if (_PyObject_HasAttrId(obj, &PyId_id)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005825 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005826 tmp = _PyObject_GetAttrId(obj, &PyId_id);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005827 if (tmp == NULL) goto failed;
5828 res = obj2ast_identifier(tmp, &id, arena);
5829 if (res != 0) goto failed;
5830 Py_XDECREF(tmp);
5831 tmp = NULL;
5832 } else {
5833 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
5834 return 1;
5835 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005836 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005837 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005838 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005839 if (tmp == NULL) goto failed;
5840 res = obj2ast_expr_context(tmp, &ctx, arena);
5841 if (res != 0) goto failed;
5842 Py_XDECREF(tmp);
5843 tmp = NULL;
5844 } else {
5845 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
5846 return 1;
5847 }
5848 *out = Name(id, ctx, lineno, col_offset, arena);
5849 if (*out == NULL) goto failed;
5850 return 0;
5851 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005852 isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
5853 if (isinstance == -1) {
5854 return 1;
5855 }
5856 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005857 asdl_seq* elts;
5858 expr_context_ty ctx;
5859
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005860 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005861 int res;
5862 Py_ssize_t len;
5863 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005864 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005865 if (tmp == NULL) goto failed;
5866 if (!PyList_Check(tmp)) {
5867 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5868 goto failed;
5869 }
5870 len = PyList_GET_SIZE(tmp);
5871 elts = asdl_seq_new(len, arena);
5872 if (elts == NULL) goto failed;
5873 for (i = 0; i < len; i++) {
5874 expr_ty value;
5875 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5876 if (res != 0) goto failed;
5877 asdl_seq_SET(elts, i, value);
5878 }
5879 Py_XDECREF(tmp);
5880 tmp = NULL;
5881 } else {
5882 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
5883 return 1;
5884 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005885 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005886 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005887 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005888 if (tmp == NULL) goto failed;
5889 res = obj2ast_expr_context(tmp, &ctx, arena);
5890 if (res != 0) goto failed;
5891 Py_XDECREF(tmp);
5892 tmp = NULL;
5893 } else {
5894 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
5895 return 1;
5896 }
5897 *out = List(elts, ctx, lineno, col_offset, arena);
5898 if (*out == NULL) goto failed;
5899 return 0;
5900 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005901 isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
5902 if (isinstance == -1) {
5903 return 1;
5904 }
5905 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005906 asdl_seq* elts;
5907 expr_context_ty ctx;
5908
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005909 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005910 int res;
5911 Py_ssize_t len;
5912 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005913 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005914 if (tmp == NULL) goto failed;
5915 if (!PyList_Check(tmp)) {
5916 PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5917 goto failed;
5918 }
5919 len = PyList_GET_SIZE(tmp);
5920 elts = asdl_seq_new(len, arena);
5921 if (elts == NULL) goto failed;
5922 for (i = 0; i < len; i++) {
5923 expr_ty value;
5924 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5925 if (res != 0) goto failed;
5926 asdl_seq_SET(elts, i, value);
5927 }
5928 Py_XDECREF(tmp);
5929 tmp = NULL;
5930 } else {
5931 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
5932 return 1;
5933 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005934 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005935 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005936 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005937 if (tmp == NULL) goto failed;
5938 res = obj2ast_expr_context(tmp, &ctx, arena);
5939 if (res != 0) goto failed;
5940 Py_XDECREF(tmp);
5941 tmp = NULL;
5942 } else {
5943 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
5944 return 1;
5945 }
5946 *out = Tuple(elts, ctx, lineno, col_offset, arena);
5947 if (*out == NULL) goto failed;
5948 return 0;
5949 }
5950
Benjamin Peterson5b066812010-11-20 01:38:49 +00005951 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
5952 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00005953 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005954 return 1;
5955}
5956
5957int
5958obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
5959{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005960 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005961
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005962 isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
5963 if (isinstance == -1) {
5964 return 1;
5965 }
5966 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005967 *out = Load;
5968 return 0;
5969 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005970 isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
5971 if (isinstance == -1) {
5972 return 1;
5973 }
5974 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005975 *out = Store;
5976 return 0;
5977 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005978 isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
5979 if (isinstance == -1) {
5980 return 1;
5981 }
5982 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005983 *out = Del;
5984 return 0;
5985 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005986 isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
5987 if (isinstance == -1) {
5988 return 1;
5989 }
5990 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005991 *out = AugLoad;
5992 return 0;
5993 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005994 isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
5995 if (isinstance == -1) {
5996 return 1;
5997 }
5998 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005999 *out = AugStore;
6000 return 0;
6001 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006002 isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
6003 if (isinstance == -1) {
6004 return 1;
6005 }
6006 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006007 *out = Param;
6008 return 0;
6009 }
6010
Benjamin Peterson5b066812010-11-20 01:38:49 +00006011 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006012 return 1;
6013}
6014
6015int
6016obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
6017{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006018 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006019
Benjamin Petersond8f65972010-11-20 04:31:07 +00006020 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006021
6022 if (obj == Py_None) {
6023 *out = NULL;
6024 return 0;
6025 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006026 isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
6027 if (isinstance == -1) {
6028 return 1;
6029 }
6030 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006031 expr_ty lower;
6032 expr_ty upper;
6033 expr_ty step;
6034
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006035 if (_PyObject_HasAttrId(obj, &PyId_lower)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006036 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006037 tmp = _PyObject_GetAttrId(obj, &PyId_lower);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006038 if (tmp == NULL) goto failed;
6039 res = obj2ast_expr(tmp, &lower, arena);
6040 if (res != 0) goto failed;
6041 Py_XDECREF(tmp);
6042 tmp = NULL;
6043 } else {
6044 lower = NULL;
6045 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006046 if (_PyObject_HasAttrId(obj, &PyId_upper)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006047 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006048 tmp = _PyObject_GetAttrId(obj, &PyId_upper);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006049 if (tmp == NULL) goto failed;
6050 res = obj2ast_expr(tmp, &upper, arena);
6051 if (res != 0) goto failed;
6052 Py_XDECREF(tmp);
6053 tmp = NULL;
6054 } else {
6055 upper = NULL;
6056 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006057 if (_PyObject_HasAttrId(obj, &PyId_step)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006058 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006059 tmp = _PyObject_GetAttrId(obj, &PyId_step);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006060 if (tmp == NULL) goto failed;
6061 res = obj2ast_expr(tmp, &step, arena);
6062 if (res != 0) goto failed;
6063 Py_XDECREF(tmp);
6064 tmp = NULL;
6065 } else {
6066 step = NULL;
6067 }
6068 *out = Slice(lower, upper, step, arena);
6069 if (*out == NULL) goto failed;
6070 return 0;
6071 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006072 isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
6073 if (isinstance == -1) {
6074 return 1;
6075 }
6076 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006077 asdl_seq* dims;
6078
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006079 if (_PyObject_HasAttrId(obj, &PyId_dims)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006080 int res;
6081 Py_ssize_t len;
6082 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006083 tmp = _PyObject_GetAttrId(obj, &PyId_dims);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006084 if (tmp == NULL) goto failed;
6085 if (!PyList_Check(tmp)) {
6086 PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6087 goto failed;
6088 }
6089 len = PyList_GET_SIZE(tmp);
6090 dims = asdl_seq_new(len, arena);
6091 if (dims == NULL) goto failed;
6092 for (i = 0; i < len; i++) {
6093 slice_ty value;
6094 res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
6095 if (res != 0) goto failed;
6096 asdl_seq_SET(dims, i, value);
6097 }
6098 Py_XDECREF(tmp);
6099 tmp = NULL;
6100 } else {
6101 PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
6102 return 1;
6103 }
6104 *out = ExtSlice(dims, arena);
6105 if (*out == NULL) goto failed;
6106 return 0;
6107 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006108 isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
6109 if (isinstance == -1) {
6110 return 1;
6111 }
6112 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006113 expr_ty value;
6114
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006115 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006116 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006117 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006118 if (tmp == NULL) goto failed;
6119 res = obj2ast_expr(tmp, &value, arena);
6120 if (res != 0) goto failed;
6121 Py_XDECREF(tmp);
6122 tmp = NULL;
6123 } else {
6124 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
6125 return 1;
6126 }
6127 *out = Index(value, arena);
6128 if (*out == NULL) goto failed;
6129 return 0;
6130 }
6131
Benjamin Peterson5b066812010-11-20 01:38:49 +00006132 PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %R", obj);
6133 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00006134 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006135 return 1;
6136}
6137
6138int
6139obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
6140{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006141 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006142
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006143 isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
6144 if (isinstance == -1) {
6145 return 1;
6146 }
6147 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006148 *out = And;
6149 return 0;
6150 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006151 isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
6152 if (isinstance == -1) {
6153 return 1;
6154 }
6155 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006156 *out = Or;
6157 return 0;
6158 }
6159
Benjamin Peterson5b066812010-11-20 01:38:49 +00006160 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006161 return 1;
6162}
6163
6164int
6165obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
6166{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006167 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006168
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006169 isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
6170 if (isinstance == -1) {
6171 return 1;
6172 }
6173 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006174 *out = Add;
6175 return 0;
6176 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006177 isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
6178 if (isinstance == -1) {
6179 return 1;
6180 }
6181 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006182 *out = Sub;
6183 return 0;
6184 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006185 isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
6186 if (isinstance == -1) {
6187 return 1;
6188 }
6189 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006190 *out = Mult;
6191 return 0;
6192 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006193 isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
6194 if (isinstance == -1) {
6195 return 1;
6196 }
6197 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006198 *out = Div;
6199 return 0;
6200 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006201 isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
6202 if (isinstance == -1) {
6203 return 1;
6204 }
6205 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006206 *out = Mod;
6207 return 0;
6208 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006209 isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
6210 if (isinstance == -1) {
6211 return 1;
6212 }
6213 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006214 *out = Pow;
6215 return 0;
6216 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006217 isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
6218 if (isinstance == -1) {
6219 return 1;
6220 }
6221 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006222 *out = LShift;
6223 return 0;
6224 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006225 isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
6226 if (isinstance == -1) {
6227 return 1;
6228 }
6229 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006230 *out = RShift;
6231 return 0;
6232 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006233 isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
6234 if (isinstance == -1) {
6235 return 1;
6236 }
6237 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006238 *out = BitOr;
6239 return 0;
6240 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006241 isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
6242 if (isinstance == -1) {
6243 return 1;
6244 }
6245 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006246 *out = BitXor;
6247 return 0;
6248 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006249 isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
6250 if (isinstance == -1) {
6251 return 1;
6252 }
6253 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006254 *out = BitAnd;
6255 return 0;
6256 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006257 isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
6258 if (isinstance == -1) {
6259 return 1;
6260 }
6261 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006262 *out = FloorDiv;
6263 return 0;
6264 }
6265
Benjamin Peterson5b066812010-11-20 01:38:49 +00006266 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006267 return 1;
6268}
6269
6270int
6271obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
6272{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006273 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006274
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006275 isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
6276 if (isinstance == -1) {
6277 return 1;
6278 }
6279 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006280 *out = Invert;
6281 return 0;
6282 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006283 isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
6284 if (isinstance == -1) {
6285 return 1;
6286 }
6287 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006288 *out = Not;
6289 return 0;
6290 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006291 isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
6292 if (isinstance == -1) {
6293 return 1;
6294 }
6295 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006296 *out = UAdd;
6297 return 0;
6298 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006299 isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
6300 if (isinstance == -1) {
6301 return 1;
6302 }
6303 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006304 *out = USub;
6305 return 0;
6306 }
6307
Benjamin Peterson5b066812010-11-20 01:38:49 +00006308 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006309 return 1;
6310}
6311
6312int
6313obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
6314{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006315 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006316
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006317 isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
6318 if (isinstance == -1) {
6319 return 1;
6320 }
6321 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006322 *out = Eq;
6323 return 0;
6324 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006325 isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
6326 if (isinstance == -1) {
6327 return 1;
6328 }
6329 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006330 *out = NotEq;
6331 return 0;
6332 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006333 isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
6334 if (isinstance == -1) {
6335 return 1;
6336 }
6337 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006338 *out = Lt;
6339 return 0;
6340 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006341 isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
6342 if (isinstance == -1) {
6343 return 1;
6344 }
6345 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006346 *out = LtE;
6347 return 0;
6348 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006349 isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
6350 if (isinstance == -1) {
6351 return 1;
6352 }
6353 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006354 *out = Gt;
6355 return 0;
6356 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006357 isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
6358 if (isinstance == -1) {
6359 return 1;
6360 }
6361 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006362 *out = GtE;
6363 return 0;
6364 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006365 isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
6366 if (isinstance == -1) {
6367 return 1;
6368 }
6369 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006370 *out = Is;
6371 return 0;
6372 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006373 isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
6374 if (isinstance == -1) {
6375 return 1;
6376 }
6377 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006378 *out = IsNot;
6379 return 0;
6380 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006381 isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
6382 if (isinstance == -1) {
6383 return 1;
6384 }
6385 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006386 *out = In;
6387 return 0;
6388 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006389 isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
6390 if (isinstance == -1) {
6391 return 1;
6392 }
6393 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006394 *out = NotIn;
6395 return 0;
6396 }
6397
Benjamin Peterson5b066812010-11-20 01:38:49 +00006398 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006399 return 1;
6400}
6401
6402int
6403obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
6404{
6405 PyObject* tmp = NULL;
6406 expr_ty target;
6407 expr_ty iter;
6408 asdl_seq* ifs;
6409
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006410 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006411 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006412 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006413 if (tmp == NULL) goto failed;
6414 res = obj2ast_expr(tmp, &target, arena);
6415 if (res != 0) goto failed;
6416 Py_XDECREF(tmp);
6417 tmp = NULL;
6418 } else {
6419 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
6420 return 1;
6421 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006422 if (_PyObject_HasAttrId(obj, &PyId_iter)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006423 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006424 tmp = _PyObject_GetAttrId(obj, &PyId_iter);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006425 if (tmp == NULL) goto failed;
6426 res = obj2ast_expr(tmp, &iter, arena);
6427 if (res != 0) goto failed;
6428 Py_XDECREF(tmp);
6429 tmp = NULL;
6430 } else {
6431 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
6432 return 1;
6433 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006434 if (_PyObject_HasAttrId(obj, &PyId_ifs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006435 int res;
6436 Py_ssize_t len;
6437 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006438 tmp = _PyObject_GetAttrId(obj, &PyId_ifs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006439 if (tmp == NULL) goto failed;
6440 if (!PyList_Check(tmp)) {
6441 PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6442 goto failed;
6443 }
6444 len = PyList_GET_SIZE(tmp);
6445 ifs = asdl_seq_new(len, arena);
6446 if (ifs == NULL) goto failed;
6447 for (i = 0; i < len; i++) {
6448 expr_ty value;
6449 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6450 if (res != 0) goto failed;
6451 asdl_seq_SET(ifs, i, value);
6452 }
6453 Py_XDECREF(tmp);
6454 tmp = NULL;
6455 } else {
6456 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
6457 return 1;
6458 }
6459 *out = comprehension(target, iter, ifs, arena);
6460 return 0;
6461failed:
6462 Py_XDECREF(tmp);
6463 return 1;
6464}
6465
6466int
6467obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
6468{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006469 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00006470
Benjamin Petersond8f65972010-11-20 04:31:07 +00006471 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006472 int lineno;
6473 int col_offset;
6474
Neal Norwitzad74aa82008-03-31 05:14:30 +00006475 if (obj == Py_None) {
6476 *out = NULL;
6477 return 0;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006478 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006479 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006480 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006481 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006482 if (tmp == NULL) goto failed;
6483 res = obj2ast_int(tmp, &lineno, arena);
6484 if (res != 0) goto failed;
6485 Py_XDECREF(tmp);
6486 tmp = NULL;
6487 } else {
6488 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
6489 return 1;
6490 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006491 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006492 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006493 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006494 if (tmp == NULL) goto failed;
6495 res = obj2ast_int(tmp, &col_offset, arena);
6496 if (res != 0) goto failed;
6497 Py_XDECREF(tmp);
6498 tmp = NULL;
6499 } else {
6500 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
6501 return 1;
6502 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006503 isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
6504 if (isinstance == -1) {
6505 return 1;
6506 }
6507 if (isinstance) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006508 expr_ty type;
6509 identifier name;
6510 asdl_seq* body;
6511
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006512 if (_PyObject_HasAttrId(obj, &PyId_type)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006513 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006514 tmp = _PyObject_GetAttrId(obj, &PyId_type);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006515 if (tmp == NULL) goto failed;
6516 res = obj2ast_expr(tmp, &type, arena);
6517 if (res != 0) goto failed;
6518 Py_XDECREF(tmp);
6519 tmp = NULL;
6520 } else {
6521 type = NULL;
6522 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006523 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006524 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006525 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006526 if (tmp == NULL) goto failed;
6527 res = obj2ast_identifier(tmp, &name, arena);
6528 if (res != 0) goto failed;
6529 Py_XDECREF(tmp);
6530 tmp = NULL;
6531 } else {
6532 name = NULL;
6533 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006534 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006535 int res;
6536 Py_ssize_t len;
6537 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006538 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006539 if (tmp == NULL) goto failed;
6540 if (!PyList_Check(tmp)) {
6541 PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6542 goto failed;
6543 }
6544 len = PyList_GET_SIZE(tmp);
6545 body = asdl_seq_new(len, arena);
6546 if (body == NULL) goto failed;
6547 for (i = 0; i < len; i++) {
6548 stmt_ty value;
6549 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
6550 if (res != 0) goto failed;
6551 asdl_seq_SET(body, i, value);
6552 }
6553 Py_XDECREF(tmp);
6554 tmp = NULL;
6555 } else {
6556 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
6557 return 1;
6558 }
6559 *out = ExceptHandler(type, name, body, lineno, col_offset,
6560 arena);
6561 if (*out == NULL) goto failed;
6562 return 0;
6563 }
6564
Benjamin Peterson5b066812010-11-20 01:38:49 +00006565 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
6566 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00006567 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006568 return 1;
6569}
6570
6571int
6572obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
6573{
6574 PyObject* tmp = NULL;
6575 asdl_seq* args;
6576 identifier vararg;
6577 expr_ty varargannotation;
6578 asdl_seq* kwonlyargs;
6579 identifier kwarg;
6580 expr_ty kwargannotation;
6581 asdl_seq* defaults;
6582 asdl_seq* kw_defaults;
6583
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006584 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006585 int res;
6586 Py_ssize_t len;
6587 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006588 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006589 if (tmp == NULL) goto failed;
6590 if (!PyList_Check(tmp)) {
6591 PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6592 goto failed;
6593 }
6594 len = PyList_GET_SIZE(tmp);
6595 args = asdl_seq_new(len, arena);
6596 if (args == NULL) goto failed;
6597 for (i = 0; i < len; i++) {
6598 arg_ty value;
6599 res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
6600 if (res != 0) goto failed;
6601 asdl_seq_SET(args, i, value);
6602 }
6603 Py_XDECREF(tmp);
6604 tmp = NULL;
6605 } else {
6606 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
6607 return 1;
6608 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006609 if (_PyObject_HasAttrId(obj, &PyId_vararg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006610 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006611 tmp = _PyObject_GetAttrId(obj, &PyId_vararg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006612 if (tmp == NULL) goto failed;
6613 res = obj2ast_identifier(tmp, &vararg, arena);
6614 if (res != 0) goto failed;
6615 Py_XDECREF(tmp);
6616 tmp = NULL;
6617 } else {
6618 vararg = NULL;
6619 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006620 if (_PyObject_HasAttrId(obj, &PyId_varargannotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006621 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006622 tmp = _PyObject_GetAttrId(obj, &PyId_varargannotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006623 if (tmp == NULL) goto failed;
6624 res = obj2ast_expr(tmp, &varargannotation, arena);
6625 if (res != 0) goto failed;
6626 Py_XDECREF(tmp);
6627 tmp = NULL;
6628 } else {
6629 varargannotation = NULL;
6630 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006631 if (_PyObject_HasAttrId(obj, &PyId_kwonlyargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006632 int res;
6633 Py_ssize_t len;
6634 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006635 tmp = _PyObject_GetAttrId(obj, &PyId_kwonlyargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006636 if (tmp == NULL) goto failed;
6637 if (!PyList_Check(tmp)) {
6638 PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6639 goto failed;
6640 }
6641 len = PyList_GET_SIZE(tmp);
6642 kwonlyargs = asdl_seq_new(len, arena);
6643 if (kwonlyargs == NULL) goto failed;
6644 for (i = 0; i < len; i++) {
6645 arg_ty value;
6646 res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
6647 if (res != 0) goto failed;
6648 asdl_seq_SET(kwonlyargs, i, value);
6649 }
6650 Py_XDECREF(tmp);
6651 tmp = NULL;
6652 } else {
6653 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
6654 return 1;
6655 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006656 if (_PyObject_HasAttrId(obj, &PyId_kwarg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006657 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006658 tmp = _PyObject_GetAttrId(obj, &PyId_kwarg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006659 if (tmp == NULL) goto failed;
6660 res = obj2ast_identifier(tmp, &kwarg, arena);
6661 if (res != 0) goto failed;
6662 Py_XDECREF(tmp);
6663 tmp = NULL;
6664 } else {
6665 kwarg = NULL;
6666 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006667 if (_PyObject_HasAttrId(obj, &PyId_kwargannotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006668 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006669 tmp = _PyObject_GetAttrId(obj, &PyId_kwargannotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006670 if (tmp == NULL) goto failed;
6671 res = obj2ast_expr(tmp, &kwargannotation, arena);
6672 if (res != 0) goto failed;
6673 Py_XDECREF(tmp);
6674 tmp = NULL;
6675 } else {
6676 kwargannotation = NULL;
6677 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006678 if (_PyObject_HasAttrId(obj, &PyId_defaults)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006679 int res;
6680 Py_ssize_t len;
6681 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006682 tmp = _PyObject_GetAttrId(obj, &PyId_defaults);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006683 if (tmp == NULL) goto failed;
6684 if (!PyList_Check(tmp)) {
6685 PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6686 goto failed;
6687 }
6688 len = PyList_GET_SIZE(tmp);
6689 defaults = asdl_seq_new(len, arena);
6690 if (defaults == NULL) goto failed;
6691 for (i = 0; i < len; i++) {
6692 expr_ty value;
6693 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6694 if (res != 0) goto failed;
6695 asdl_seq_SET(defaults, i, value);
6696 }
6697 Py_XDECREF(tmp);
6698 tmp = NULL;
6699 } else {
6700 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
6701 return 1;
6702 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006703 if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006704 int res;
6705 Py_ssize_t len;
6706 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006707 tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006708 if (tmp == NULL) goto failed;
6709 if (!PyList_Check(tmp)) {
6710 PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6711 goto failed;
6712 }
6713 len = PyList_GET_SIZE(tmp);
6714 kw_defaults = asdl_seq_new(len, arena);
6715 if (kw_defaults == NULL) goto failed;
6716 for (i = 0; i < len; i++) {
6717 expr_ty value;
6718 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6719 if (res != 0) goto failed;
6720 asdl_seq_SET(kw_defaults, i, value);
6721 }
6722 Py_XDECREF(tmp);
6723 tmp = NULL;
6724 } else {
6725 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
6726 return 1;
6727 }
6728 *out = arguments(args, vararg, varargannotation, kwonlyargs, kwarg,
6729 kwargannotation, defaults, kw_defaults, arena);
6730 return 0;
6731failed:
6732 Py_XDECREF(tmp);
6733 return 1;
6734}
6735
6736int
6737obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena)
6738{
6739 PyObject* tmp = NULL;
6740 identifier arg;
6741 expr_ty annotation;
6742
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006743 if (_PyObject_HasAttrId(obj, &PyId_arg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006744 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006745 tmp = _PyObject_GetAttrId(obj, &PyId_arg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006746 if (tmp == NULL) goto failed;
6747 res = obj2ast_identifier(tmp, &arg, arena);
6748 if (res != 0) goto failed;
6749 Py_XDECREF(tmp);
6750 tmp = NULL;
6751 } else {
6752 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
6753 return 1;
6754 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006755 if (_PyObject_HasAttrId(obj, &PyId_annotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006756 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006757 tmp = _PyObject_GetAttrId(obj, &PyId_annotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006758 if (tmp == NULL) goto failed;
6759 res = obj2ast_expr(tmp, &annotation, arena);
6760 if (res != 0) goto failed;
6761 Py_XDECREF(tmp);
6762 tmp = NULL;
6763 } else {
6764 annotation = NULL;
6765 }
6766 *out = arg(arg, annotation, arena);
6767 return 0;
6768failed:
6769 Py_XDECREF(tmp);
6770 return 1;
6771}
6772
6773int
6774obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
6775{
6776 PyObject* tmp = NULL;
6777 identifier arg;
6778 expr_ty value;
6779
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006780 if (_PyObject_HasAttrId(obj, &PyId_arg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006781 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006782 tmp = _PyObject_GetAttrId(obj, &PyId_arg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006783 if (tmp == NULL) goto failed;
6784 res = obj2ast_identifier(tmp, &arg, arena);
6785 if (res != 0) goto failed;
6786 Py_XDECREF(tmp);
6787 tmp = NULL;
6788 } else {
6789 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from keyword");
6790 return 1;
6791 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006792 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006793 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006794 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006795 if (tmp == NULL) goto failed;
6796 res = obj2ast_expr(tmp, &value, arena);
6797 if (res != 0) goto failed;
6798 Py_XDECREF(tmp);
6799 tmp = NULL;
6800 } else {
6801 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
6802 return 1;
6803 }
6804 *out = keyword(arg, value, arena);
6805 return 0;
6806failed:
6807 Py_XDECREF(tmp);
6808 return 1;
6809}
6810
6811int
6812obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
6813{
6814 PyObject* tmp = NULL;
6815 identifier name;
6816 identifier asname;
6817
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006818 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006819 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006820 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006821 if (tmp == NULL) goto failed;
6822 res = obj2ast_identifier(tmp, &name, arena);
6823 if (res != 0) goto failed;
6824 Py_XDECREF(tmp);
6825 tmp = NULL;
6826 } else {
6827 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
6828 return 1;
6829 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006830 if (_PyObject_HasAttrId(obj, &PyId_asname)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006831 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006832 tmp = _PyObject_GetAttrId(obj, &PyId_asname);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006833 if (tmp == NULL) goto failed;
6834 res = obj2ast_identifier(tmp, &asname, arena);
6835 if (res != 0) goto failed;
6836 Py_XDECREF(tmp);
6837 tmp = NULL;
6838 } else {
6839 asname = NULL;
6840 }
6841 *out = alias(name, asname, arena);
6842 return 0;
6843failed:
6844 Py_XDECREF(tmp);
6845 return 1;
6846}
6847
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006848int
6849obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena)
6850{
6851 PyObject* tmp = NULL;
6852 expr_ty context_expr;
6853 expr_ty optional_vars;
6854
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006855 if (_PyObject_HasAttrId(obj, &PyId_context_expr)) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006856 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006857 tmp = _PyObject_GetAttrId(obj, &PyId_context_expr);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006858 if (tmp == NULL) goto failed;
6859 res = obj2ast_expr(tmp, &context_expr, arena);
6860 if (res != 0) goto failed;
6861 Py_XDECREF(tmp);
6862 tmp = NULL;
6863 } else {
6864 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
6865 return 1;
6866 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006867 if (_PyObject_HasAttrId(obj, &PyId_optional_vars)) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006868 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006869 tmp = _PyObject_GetAttrId(obj, &PyId_optional_vars);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006870 if (tmp == NULL) goto failed;
6871 res = obj2ast_expr(tmp, &optional_vars, arena);
6872 if (res != 0) goto failed;
6873 Py_XDECREF(tmp);
6874 tmp = NULL;
6875 } else {
6876 optional_vars = NULL;
6877 }
6878 *out = withitem(context_expr, optional_vars, arena);
6879 return 0;
6880failed:
6881 Py_XDECREF(tmp);
6882 return 1;
6883}
6884
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006885
Martin v. Löwis1a214512008-06-11 05:26:20 +00006886static struct PyModuleDef _astmodule = {
6887 PyModuleDef_HEAD_INIT, "_ast"
6888};
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006889PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00006890PyInit__ast(void)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006891{
6892 PyObject *m, *d;
Martin v. Löwis1a214512008-06-11 05:26:20 +00006893 if (!init_types()) return NULL;
6894 m = PyModule_Create(&_astmodule);
6895 if (!m) return NULL;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006896 d = PyModule_GetDict(m);
Martin v. Löwis1a214512008-06-11 05:26:20 +00006897 if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return
6898 NULL;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006899 if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006900 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +00006901 if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return
6902 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006903 if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006904 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006905 if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006906 < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006907 if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006908 0) return NULL;
6909 if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return
6910 NULL;
6911 if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return
6912 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006913 if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006914 < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006915 if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006916 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006917 if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006918 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006919 if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006920 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006921 if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006922 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006923 if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006924 0) return NULL;
6925 if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return
6926 NULL;
6927 if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
6928 NULL;
6929 if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
6930 if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return
6931 NULL;
6932 if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
6933 NULL;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05006934 if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return
6935 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006936 if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006937 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006938 if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006939 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006940 if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006941 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006942 if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006943 return NULL;
Jeremy Hylton81e95022007-02-27 06:50:52 +00006944 if (PyDict_SetItemString(d, "Nonlocal", (PyObject*)Nonlocal_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006945 return NULL;
6946 if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return
6947 NULL;
6948 if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return
6949 NULL;
6950 if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return
6951 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006952 if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006953 return NULL;
6954 if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return
6955 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006956 if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006957 return NULL;
6958 if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return
6959 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006960 if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006961 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006962 if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006963 return NULL;
6964 if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return
6965 NULL;
6966 if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return
6967 NULL;
6968 if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return
6969 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006970 if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006971 return NULL;
Nick Coghlan650f0d02007-04-15 12:05:43 +00006972 if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006973 return NULL;
Guido van Rossum992d4a32007-07-11 13:09:30 +00006974 if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006975 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006976 if (PyDict_SetItemString(d, "GeneratorExp",
Martin v. Löwis1a214512008-06-11 05:26:20 +00006977 (PyObject*)GeneratorExp_type) < 0) return NULL;
6978 if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
6979 NULL;
Benjamin Peterson527c6222012-01-14 08:58:23 -05006980 if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) <
6981 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006982 if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006983 return NULL;
6984 if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return
6985 NULL;
6986 if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return
6987 NULL;
6988 if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return
6989 NULL;
6990 if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return
6991 NULL;
Georg Brandl52318d62006-09-06 07:06:08 +00006992 if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006993 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006994 if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006995 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006996 if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006997 0) return NULL;
Guido van Rossum0368b722007-05-11 16:50:42 +00006998 if (PyDict_SetItemString(d, "Starred", (PyObject*)Starred_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006999 return NULL;
7000 if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return
7001 NULL;
7002 if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return
7003 NULL;
7004 if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return
7005 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007006 if (PyDict_SetItemString(d, "expr_context",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007007 (PyObject*)expr_context_type) < 0) return NULL;
7008 if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return
7009 NULL;
7010 if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return
7011 NULL;
7012 if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return
7013 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007014 if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007015 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007016 if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007017 return NULL;
7018 if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return
7019 NULL;
7020 if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return
7021 NULL;
7022 if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return
7023 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007024 if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007025 return NULL;
7026 if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return
7027 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007028 if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007029 return NULL;
7030 if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return
7031 NULL;
7032 if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007033 if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007034 return NULL;
7035 if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return
7036 NULL;
7037 if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return
7038 NULL;
7039 if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return
7040 NULL;
7041 if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return
7042 NULL;
7043 if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return
7044 NULL;
7045 if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return
7046 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007047 if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007048 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007049 if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007050 return NULL;
7051 if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return
7052 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007053 if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007054 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007055 if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007056 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007057 if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007058 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007059 if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007060 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007061 if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007062 return NULL;
7063 if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return
7064 NULL;
7065 if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return
7066 NULL;
7067 if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return
7068 NULL;
7069 if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return
7070 NULL;
7071 if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return NULL;
7072 if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return
7073 NULL;
7074 if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return NULL;
7075 if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return
7076 NULL;
7077 if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return NULL;
7078 if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return
7079 NULL;
7080 if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return NULL;
7081 if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return
7082 NULL;
7083 if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return NULL;
7084 if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return
7085 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007086 if (PyDict_SetItemString(d, "comprehension",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007087 (PyObject*)comprehension_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007088 if (PyDict_SetItemString(d, "excepthandler",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007089 (PyObject*)excepthandler_type) < 0) return NULL;
Neal Norwitzad74aa82008-03-31 05:14:30 +00007090 if (PyDict_SetItemString(d, "ExceptHandler",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007091 (PyObject*)ExceptHandler_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007092 if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00007093 0) return NULL;
7094 if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return
7095 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007096 if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007097 return NULL;
7098 if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return
7099 NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05007100 if (PyDict_SetItemString(d, "withitem", (PyObject*)withitem_type) < 0)
7101 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +00007102 return m;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00007103}
7104
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007105
Martin v. Löwisbd260da2006-02-26 19:42:26 +00007106PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007107{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00007108 init_types();
7109 return ast2obj_mod(t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007110}
Martin v. Löwis5b222132007-06-10 09:51:05 +00007111
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007112/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
7113mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007114{
7115 mod_ty res;
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007116 PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type,
7117 (PyObject*)Interactive_type};
7118 char *req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00007119 int isinstance;
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007120 assert(0 <= mode && mode <= 2);
7121
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007122 init_types();
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007123
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00007124 isinstance = PyObject_IsInstance(ast, req_type[mode]);
7125 if (isinstance == -1)
7126 return NULL;
7127 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007128 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
7129 req_name[mode], Py_TYPE(ast)->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007130 return NULL;
7131 }
7132 if (obj2ast_mod(ast, &res, arena) != 0)
7133 return NULL;
7134 else
7135 return res;
7136}
7137
7138int PyAST_Check(PyObject* obj)
7139{
7140 init_types();
Neal Norwitz207c9f32008-03-31 04:42:11 +00007141 return PyObject_IsInstance(obj, (PyObject*)&AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007142}
7143
Martin v. Löwis5b222132007-06-10 09:51:05 +00007144