blob: d9e13e28b0d97162729bd9d4b6ec0469491ca1c2 [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);
467}
468
Neal Norwitz207c9f32008-03-31 04:42:11 +0000469static int
470ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
471{
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200472 _Py_IDENTIFIER(_fields);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000473 Py_ssize_t i, numfields = 0;
474 int res = -1;
475 PyObject *key, *value, *fields;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200476 fields = _PyObject_GetAttrId((PyObject*)Py_TYPE(self), &PyId__fields);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000477 if (!fields)
478 PyErr_Clear();
479 if (fields) {
480 numfields = PySequence_Size(fields);
481 if (numfields == -1)
482 goto cleanup;
483 }
484 res = 0; /* if no error occurs, this stays 0 to the end */
485 if (PyTuple_GET_SIZE(args) > 0) {
486 if (numfields != PyTuple_GET_SIZE(args)) {
487 PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
Amaury Forgeot d'Arc245c70b2008-09-10 22:24:24 +0000488 "%zd positional argument%s",
Neal Norwitz207c9f32008-03-31 04:42:11 +0000489 Py_TYPE(self)->tp_name,
490 numfields == 0 ? "" : "either 0 or ",
491 numfields, numfields == 1 ? "" : "s");
492 res = -1;
493 goto cleanup;
494 }
495 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
496 /* cannot be reached when fields is NULL */
497 PyObject *name = PySequence_GetItem(fields, i);
498 if (!name) {
499 res = -1;
500 goto cleanup;
501 }
502 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
503 Py_DECREF(name);
504 if (res < 0)
505 goto cleanup;
506 }
507 }
508 if (kw) {
509 i = 0; /* needed by PyDict_Next */
510 while (PyDict_Next(kw, &i, &key, &value)) {
511 res = PyObject_SetAttr(self, key, value);
512 if (res < 0)
513 goto cleanup;
514 }
515 }
516 cleanup:
517 Py_XDECREF(fields);
518 return res;
519}
520
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000521/* Pickling support */
522static PyObject *
523ast_type_reduce(PyObject *self, PyObject *unused)
524{
525 PyObject *res;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200526 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200527 PyObject *dict = _PyObject_GetAttrId(self, &PyId___dict__);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000528 if (dict == NULL) {
529 if (PyErr_ExceptionMatches(PyExc_AttributeError))
530 PyErr_Clear();
531 else
532 return NULL;
533 }
534 if (dict) {
535 res = Py_BuildValue("O()O", Py_TYPE(self), dict);
536 Py_DECREF(dict);
537 return res;
538 }
539 return Py_BuildValue("O()", Py_TYPE(self));
540}
541
542static PyMethodDef ast_type_methods[] = {
543 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
544 {NULL}
545};
546
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700547static PyGetSetDef ast_type_getsets[] = {
548 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
549 {NULL}
550};
551
Neal Norwitz207c9f32008-03-31 04:42:11 +0000552static PyTypeObject AST_type = {
553 PyVarObject_HEAD_INIT(&PyType_Type, 0)
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000554 "_ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700555 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000556 0,
Benjamin Peterson1767e022012-03-14 21:50:29 -0500557 (destructor)ast_dealloc, /* tp_dealloc */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000558 0, /* tp_print */
559 0, /* tp_getattr */
560 0, /* tp_setattr */
Mark Dickinsone94c6792009-02-02 20:36:42 +0000561 0, /* tp_reserved */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000562 0, /* tp_repr */
563 0, /* tp_as_number */
564 0, /* tp_as_sequence */
565 0, /* tp_as_mapping */
566 0, /* tp_hash */
567 0, /* tp_call */
568 0, /* tp_str */
569 PyObject_GenericGetAttr, /* tp_getattro */
570 PyObject_GenericSetAttr, /* tp_setattro */
571 0, /* tp_as_buffer */
572 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
573 0, /* tp_doc */
574 0, /* tp_traverse */
575 0, /* tp_clear */
576 0, /* tp_richcompare */
577 0, /* tp_weaklistoffset */
578 0, /* tp_iter */
579 0, /* tp_iternext */
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000580 ast_type_methods, /* tp_methods */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000581 0, /* tp_members */
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700582 ast_type_getsets, /* tp_getset */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000583 0, /* tp_base */
584 0, /* tp_dict */
585 0, /* tp_descr_get */
586 0, /* tp_descr_set */
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700587 offsetof(AST_object, dict),/* tp_dictoffset */
Neal Norwitz207c9f32008-03-31 04:42:11 +0000588 (initproc)ast_type_init, /* tp_init */
589 PyType_GenericAlloc, /* tp_alloc */
590 PyType_GenericNew, /* tp_new */
591 PyObject_Del, /* tp_free */
592};
593
594
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000595static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
596{
597 PyObject *fnames, *result;
598 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000599 fnames = PyTuple_New(num_fields);
600 if (!fnames) return NULL;
601 for (i = 0; i < num_fields; i++) {
Neal Norwitze4dc3242007-08-25 01:33:49 +0000602 PyObject *field = PyUnicode_FromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000603 if (!field) {
604 Py_DECREF(fnames);
605 return NULL;
606 }
607 PyTuple_SET_ITEM(fnames, i, field);
608 }
Victor Stinner7eeb5b52010-06-07 19:57:46 +0000609 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000610 type, base, "_fields", fnames, "__module__", "_ast");
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000611 Py_DECREF(fnames);
612 return (PyTypeObject*)result;
613}
614
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000615static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
616{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000617 int i, result;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200618 _Py_IDENTIFIER(_attributes);
Neal Norwitz207c9f32008-03-31 04:42:11 +0000619 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000620 if (!l)
621 return 0;
622 for (i = 0; i < num_fields; i++) {
Neal Norwitze4dc3242007-08-25 01:33:49 +0000623 s = PyUnicode_FromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000624 if (!s) {
625 Py_DECREF(l);
626 return 0;
627 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000628 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000629 }
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200630 result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000631 Py_DECREF(l);
632 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000633}
634
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000635/* Conversion AST -> Python */
636
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000637static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
638{
639 int i, n = asdl_seq_LEN(seq);
640 PyObject *result = PyList_New(n);
641 PyObject *value;
642 if (!result)
643 return NULL;
644 for (i = 0; i < n; i++) {
645 value = func(asdl_seq_GET(seq, i));
646 if (!value) {
647 Py_DECREF(result);
648 return NULL;
649 }
650 PyList_SET_ITEM(result, i, value);
651 }
652 return result;
653}
654
655static PyObject* ast2obj_object(void *o)
656{
657 if (!o)
658 o = Py_None;
659 Py_INCREF((PyObject*)o);
660 return (PyObject*)o;
661}
662#define ast2obj_identifier ast2obj_object
663#define ast2obj_string ast2obj_object
Benjamin Petersone2498412011-08-09 16:08:39 -0500664#define ast2obj_bytes ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000665
Thomas Woutersa44f3a32007-02-26 18:20:15 +0000666static PyObject* ast2obj_int(long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000667{
Christian Heimes217cfd12007-12-02 14:31:20 +0000668 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000669}
670
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000671/* Conversion Python -> AST */
672
673static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
674{
675 if (obj == Py_None)
676 obj = NULL;
677 if (obj)
678 PyArena_AddPyObject(arena, obj);
679 Py_XINCREF(obj);
680 *out = obj;
681 return 0;
682}
683
Benjamin Peterson180e6352011-07-22 11:09:07 -0500684static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500685{
Benjamin Peterson180e6352011-07-22 11:09:07 -0500686 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
687 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500688 return 1;
689 }
690 return obj2ast_object(obj, out, arena);
691}
692
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500693static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
694{
Benjamin Peterson0224d4e2011-08-31 22:13:03 -0400695 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
Benjamin Peterson180e6352011-07-22 11:09:07 -0500696 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
697 return 1;
698 }
699 return obj2ast_object(obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500700}
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000701
Benjamin Petersone2498412011-08-09 16:08:39 -0500702static int obj2ast_bytes(PyObject* obj, PyObject** out, PyArena* arena)
703{
704 if (!PyBytes_CheckExact(obj)) {
705 PyErr_SetString(PyExc_TypeError, "AST bytes must be of type bytes");
706 return 1;
707 }
708 return obj2ast_object(obj, out, arena);
709}
710
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000711static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
712{
713 int i;
714 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +0100715 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000716 return 1;
717 }
718
719 i = (int)PyLong_AsLong(obj);
720 if (i == -1 && PyErr_Occurred())
721 return 1;
722 *out = i;
723 return 0;
724}
725
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +0000726static int add_ast_fields(void)
Benjamin Petersonce825f12008-10-24 23:11:02 +0000727{
728 PyObject *empty_tuple, *d;
729 if (PyType_Ready(&AST_type) < 0)
730 return -1;
731 d = AST_type.tp_dict;
732 empty_tuple = PyTuple_New(0);
733 if (!empty_tuple ||
734 PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
735 PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
736 Py_XDECREF(empty_tuple);
737 return -1;
738 }
739 Py_DECREF(empty_tuple);
740 return 0;
741}
742
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000743
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000744static int init_types(void)
745{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000746 static int initialized;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000747 if (initialized) return 1;
Benjamin Petersonce825f12008-10-24 23:11:02 +0000748 if (add_ast_fields() < 0) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000749 mod_type = make_type("mod", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000750 if (!mod_type) return 0;
751 if (!add_attributes(mod_type, NULL, 0)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000752 Module_type = make_type("Module", mod_type, Module_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000753 if (!Module_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000754 Interactive_type = make_type("Interactive", mod_type,
755 Interactive_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000756 if (!Interactive_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000757 Expression_type = make_type("Expression", mod_type, Expression_fields,
758 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000759 if (!Expression_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000760 Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000761 if (!Suite_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000762 stmt_type = make_type("stmt", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000763 if (!stmt_type) return 0;
Martin v. Löwis49c5da12006-03-01 22:49:05 +0000764 if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000765 FunctionDef_type = make_type("FunctionDef", stmt_type,
Neal Norwitzc1505362006-12-28 06:47:50 +0000766 FunctionDef_fields, 5);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000767 if (!FunctionDef_type) return 0;
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000768 ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 7);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000769 if (!ClassDef_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000770 Return_type = make_type("Return", stmt_type, Return_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000771 if (!Return_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000772 Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000773 if (!Delete_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000774 Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000775 if (!Assign_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000776 AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000777 if (!AugAssign_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000778 For_type = make_type("For", stmt_type, For_fields, 4);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000779 if (!For_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000780 While_type = make_type("While", stmt_type, While_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000781 if (!While_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000782 If_type = make_type("If", stmt_type, If_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000783 if (!If_type) return 0;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500784 With_type = make_type("With", stmt_type, With_fields, 2);
Guido van Rossumc2e20742006-02-27 22:32:47 +0000785 if (!With_type) return 0;
Collin Winter828f04a2007-08-31 00:04:24 +0000786 Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000787 if (!Raise_type) return 0;
Benjamin Peterson43af12b2011-05-29 11:43:10 -0500788 Try_type = make_type("Try", stmt_type, Try_fields, 4);
789 if (!Try_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000790 Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000791 if (!Assert_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000792 Import_type = make_type("Import", stmt_type, Import_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000793 if (!Import_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000794 ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields,
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000795 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000796 if (!ImportFrom_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000797 Global_type = make_type("Global", stmt_type, Global_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000798 if (!Global_type) return 0;
Jeremy Hylton81e95022007-02-27 06:50:52 +0000799 Nonlocal_type = make_type("Nonlocal", stmt_type, Nonlocal_fields, 1);
800 if (!Nonlocal_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000801 Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000802 if (!Expr_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000803 Pass_type = make_type("Pass", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000804 if (!Pass_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000805 Break_type = make_type("Break", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000806 if (!Break_type) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000807 Continue_type = make_type("Continue", stmt_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000808 if (!Continue_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000809 expr_type = make_type("expr", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000810 if (!expr_type) return 0;
Martin v. Löwis49c5da12006-03-01 22:49:05 +0000811 if (!add_attributes(expr_type, expr_attributes, 2)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000812 BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000813 if (!BoolOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000814 BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000815 if (!BinOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000816 UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000817 if (!UnaryOp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000818 Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000819 if (!Lambda_type) return 0;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000820 IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000821 if (!IfExp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000822 Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000823 if (!Dict_type) return 0;
Guido van Rossum86e58e22006-08-28 15:27:34 +0000824 Set_type = make_type("Set", expr_type, Set_fields, 1);
825 if (!Set_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000826 ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000827 if (!ListComp_type) return 0;
Nick Coghlan650f0d02007-04-15 12:05:43 +0000828 SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
829 if (!SetComp_type) return 0;
Guido van Rossum992d4a32007-07-11 13:09:30 +0000830 DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
831 if (!DictComp_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000832 GeneratorExp_type = make_type("GeneratorExp", expr_type,
833 GeneratorExp_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000834 if (!GeneratorExp_type) return 0;
Benjamin Peterson527c6222012-01-14 08:58:23 -0500835 Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000836 if (!Yield_type) return 0;
Benjamin Peterson527c6222012-01-14 08:58:23 -0500837 YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
838 if (!YieldFrom_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000839 Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000840 if (!Compare_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000841 Call_type = make_type("Call", expr_type, Call_fields, 5);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000842 if (!Call_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000843 Num_type = make_type("Num", expr_type, Num_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000844 if (!Num_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000845 Str_type = make_type("Str", expr_type, Str_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000846 if (!Str_type) return 0;
Thomas Wouters00e41de2007-02-23 19:56:57 +0000847 Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1);
848 if (!Bytes_type) return 0;
Georg Brandl52318d62006-09-06 07:06:08 +0000849 Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0);
850 if (!Ellipsis_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000851 Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000852 if (!Attribute_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000853 Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000854 if (!Subscript_type) return 0;
Guido van Rossum0368b722007-05-11 16:50:42 +0000855 Starred_type = make_type("Starred", expr_type, Starred_fields, 2);
856 if (!Starred_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000857 Name_type = make_type("Name", expr_type, Name_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000858 if (!Name_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000859 List_type = make_type("List", expr_type, List_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000860 if (!List_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000861 Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000862 if (!Tuple_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000863 expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000864 if (!expr_context_type) return 0;
865 if (!add_attributes(expr_context_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000866 Load_type = make_type("Load", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000867 if (!Load_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000868 Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000869 if (!Load_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000870 Store_type = make_type("Store", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000871 if (!Store_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000872 Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000873 if (!Store_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000874 Del_type = make_type("Del", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000875 if (!Del_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000876 Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000877 if (!Del_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000878 AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000879 if (!AugLoad_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000880 AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000881 if (!AugLoad_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000882 AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000883 if (!AugStore_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000884 AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000885 if (!AugStore_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000886 Param_type = make_type("Param", expr_context_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000887 if (!Param_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000888 Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000889 if (!Param_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000890 slice_type = make_type("slice", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000891 if (!slice_type) return 0;
892 if (!add_attributes(slice_type, NULL, 0)) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000893 Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000894 if (!Slice_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000895 ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000896 if (!ExtSlice_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000897 Index_type = make_type("Index", slice_type, Index_fields, 1);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000898 if (!Index_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000899 boolop_type = make_type("boolop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000900 if (!boolop_type) return 0;
901 if (!add_attributes(boolop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000902 And_type = make_type("And", boolop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000903 if (!And_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000904 And_singleton = PyType_GenericNew(And_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000905 if (!And_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000906 Or_type = make_type("Or", boolop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000907 if (!Or_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000908 Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000909 if (!Or_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000910 operator_type = make_type("operator", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000911 if (!operator_type) return 0;
912 if (!add_attributes(operator_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000913 Add_type = make_type("Add", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000914 if (!Add_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000915 Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000916 if (!Add_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000917 Sub_type = make_type("Sub", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000918 if (!Sub_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000919 Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000920 if (!Sub_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000921 Mult_type = make_type("Mult", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000922 if (!Mult_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000923 Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000924 if (!Mult_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000925 Div_type = make_type("Div", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000926 if (!Div_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000927 Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000928 if (!Div_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000929 Mod_type = make_type("Mod", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000930 if (!Mod_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000931 Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000932 if (!Mod_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000933 Pow_type = make_type("Pow", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000934 if (!Pow_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000935 Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000936 if (!Pow_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000937 LShift_type = make_type("LShift", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000938 if (!LShift_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000939 LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000940 if (!LShift_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000941 RShift_type = make_type("RShift", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000942 if (!RShift_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000943 RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000944 if (!RShift_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000945 BitOr_type = make_type("BitOr", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000946 if (!BitOr_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000947 BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000948 if (!BitOr_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000949 BitXor_type = make_type("BitXor", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000950 if (!BitXor_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000951 BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000952 if (!BitXor_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000953 BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000954 if (!BitAnd_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000955 BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000956 if (!BitAnd_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000957 FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000958 if (!FloorDiv_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000959 FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000960 if (!FloorDiv_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000961 unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000962 if (!unaryop_type) return 0;
963 if (!add_attributes(unaryop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000964 Invert_type = make_type("Invert", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000965 if (!Invert_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000966 Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000967 if (!Invert_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000968 Not_type = make_type("Not", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000969 if (!Not_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000970 Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000971 if (!Not_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000972 UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000973 if (!UAdd_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000974 UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000975 if (!UAdd_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000976 USub_type = make_type("USub", unaryop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000977 if (!USub_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000978 USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000979 if (!USub_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000980 cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000981 if (!cmpop_type) return 0;
982 if (!add_attributes(cmpop_type, NULL, 0)) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000983 Eq_type = make_type("Eq", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000984 if (!Eq_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000985 Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000986 if (!Eq_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000987 NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000988 if (!NotEq_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000989 NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000990 if (!NotEq_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000991 Lt_type = make_type("Lt", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000992 if (!Lt_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000993 Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000994 if (!Lt_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000995 LtE_type = make_type("LtE", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000996 if (!LtE_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000997 LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000998 if (!LtE_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000999 Gt_type = make_type("Gt", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001000 if (!Gt_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001001 Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001002 if (!Gt_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001003 GtE_type = make_type("GtE", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001004 if (!GtE_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001005 GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001006 if (!GtE_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001007 Is_type = make_type("Is", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001008 if (!Is_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001009 Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001010 if (!Is_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001011 IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001012 if (!IsNot_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001013 IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001014 if (!IsNot_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001015 In_type = make_type("In", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001016 if (!In_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001017 In_singleton = PyType_GenericNew(In_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001018 if (!In_singleton) return 0;
Martin v. Löwis8d0701d2006-02-26 23:40:20 +00001019 NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001020 if (!NotIn_type) return 0;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001021 NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001022 if (!NotIn_singleton) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001023 comprehension_type = make_type("comprehension", &AST_type,
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001024 comprehension_fields, 3);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001025 if (!comprehension_type) return 0;
Neal Norwitzad74aa82008-03-31 05:14:30 +00001026 excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001027 if (!excepthandler_type) return 0;
Neal Norwitzad74aa82008-03-31 05:14:30 +00001028 if (!add_attributes(excepthandler_type, excepthandler_attributes, 2))
1029 return 0;
1030 ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
1031 ExceptHandler_fields, 3);
1032 if (!ExceptHandler_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001033 arguments_type = make_type("arguments", &AST_type, arguments_fields, 8);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001034 if (!arguments_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001035 arg_type = make_type("arg", &AST_type, arg_fields, 2);
Neal Norwitzc1505362006-12-28 06:47:50 +00001036 if (!arg_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001037 keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001038 if (!keyword_type) return 0;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001039 alias_type = make_type("alias", &AST_type, alias_fields, 2);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001040 if (!alias_type) return 0;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001041 withitem_type = make_type("withitem", &AST_type, withitem_fields, 2);
1042 if (!withitem_type) return 0;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001043 initialized = 1;
1044 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001045}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001046
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001047static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
1048static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
1049static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
1050static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
1051 arena);
1052static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
1053static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
1054static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
1055static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
1056static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
1057static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
1058 arena);
1059static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
1060 arena);
1061static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
1062static int obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena);
1063static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
1064static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001065static int obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001066
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001067mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001068Module(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001069{
1070 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001071 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001072 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001073 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001074 p->kind = Module_kind;
1075 p->v.Module.body = body;
1076 return p;
1077}
1078
1079mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001080Interactive(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001081{
1082 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001083 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001084 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001085 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001086 p->kind = Interactive_kind;
1087 p->v.Interactive.body = body;
1088 return p;
1089}
1090
1091mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001092Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001093{
1094 mod_ty p;
1095 if (!body) {
1096 PyErr_SetString(PyExc_ValueError,
1097 "field body is required for Expression");
1098 return NULL;
1099 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001100 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001101 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001102 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001103 p->kind = Expression_kind;
1104 p->v.Expression.body = body;
1105 return p;
1106}
1107
1108mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001109Suite(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001110{
1111 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001112 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001113 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001114 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001115 p->kind = Suite_kind;
1116 p->v.Suite.body = body;
1117 return p;
1118}
1119
1120stmt_ty
1121FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001122 decorator_list, expr_ty returns, int lineno, int col_offset,
1123 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001124{
1125 stmt_ty p;
1126 if (!name) {
1127 PyErr_SetString(PyExc_ValueError,
1128 "field name is required for FunctionDef");
1129 return NULL;
1130 }
1131 if (!args) {
1132 PyErr_SetString(PyExc_ValueError,
1133 "field args is required for FunctionDef");
1134 return NULL;
1135 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001136 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001137 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001138 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001139 p->kind = FunctionDef_kind;
1140 p->v.FunctionDef.name = name;
1141 p->v.FunctionDef.args = args;
1142 p->v.FunctionDef.body = body;
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001143 p->v.FunctionDef.decorator_list = decorator_list;
Neal Norwitzc1505362006-12-28 06:47:50 +00001144 p->v.FunctionDef.returns = returns;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001145 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001146 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001147 return p;
1148}
1149
1150stmt_ty
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001151ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, expr_ty
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001152 starargs, expr_ty kwargs, asdl_seq * body, asdl_seq * decorator_list,
1153 int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001154{
1155 stmt_ty p;
1156 if (!name) {
1157 PyErr_SetString(PyExc_ValueError,
1158 "field name is required for ClassDef");
1159 return NULL;
1160 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001161 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001162 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001163 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001164 p->kind = ClassDef_kind;
1165 p->v.ClassDef.name = name;
1166 p->v.ClassDef.bases = bases;
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001167 p->v.ClassDef.keywords = keywords;
1168 p->v.ClassDef.starargs = starargs;
1169 p->v.ClassDef.kwargs = kwargs;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001170 p->v.ClassDef.body = body;
Guido van Rossumd59da4b2007-05-22 18:11:13 +00001171 p->v.ClassDef.decorator_list = decorator_list;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001172 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001173 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001174 return p;
1175}
1176
1177stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001178Return(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001179{
1180 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001181 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001182 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001183 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001184 p->kind = Return_kind;
1185 p->v.Return.value = value;
1186 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001187 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001188 return p;
1189}
1190
1191stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001192Delete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001193{
1194 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001195 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001196 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001197 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001198 p->kind = Delete_kind;
1199 p->v.Delete.targets = targets;
1200 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001201 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001202 return p;
1203}
1204
1205stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001206Assign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena
1207 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001208{
1209 stmt_ty p;
1210 if (!value) {
1211 PyErr_SetString(PyExc_ValueError,
1212 "field value is required for Assign");
1213 return NULL;
1214 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001215 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001216 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001217 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001218 p->kind = Assign_kind;
1219 p->v.Assign.targets = targets;
1220 p->v.Assign.value = value;
1221 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001222 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001223 return p;
1224}
1225
1226stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001227AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
1228 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001229{
1230 stmt_ty p;
1231 if (!target) {
1232 PyErr_SetString(PyExc_ValueError,
1233 "field target is required for AugAssign");
1234 return NULL;
1235 }
1236 if (!op) {
1237 PyErr_SetString(PyExc_ValueError,
1238 "field op is required for AugAssign");
1239 return NULL;
1240 }
1241 if (!value) {
1242 PyErr_SetString(PyExc_ValueError,
1243 "field value is required for AugAssign");
1244 return NULL;
1245 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001246 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001247 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001248 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001249 p->kind = AugAssign_kind;
1250 p->v.AugAssign.target = target;
1251 p->v.AugAssign.op = op;
1252 p->v.AugAssign.value = value;
1253 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001254 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001255 return p;
1256}
1257
1258stmt_ty
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001259For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001260 lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001261{
1262 stmt_ty p;
1263 if (!target) {
1264 PyErr_SetString(PyExc_ValueError,
1265 "field target is required for For");
1266 return NULL;
1267 }
1268 if (!iter) {
1269 PyErr_SetString(PyExc_ValueError,
1270 "field iter is required for For");
1271 return NULL;
1272 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001273 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001274 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001275 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001276 p->kind = For_kind;
1277 p->v.For.target = target;
1278 p->v.For.iter = iter;
1279 p->v.For.body = body;
1280 p->v.For.orelse = orelse;
1281 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001282 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001283 return p;
1284}
1285
1286stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001287While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1288 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001289{
1290 stmt_ty p;
1291 if (!test) {
1292 PyErr_SetString(PyExc_ValueError,
1293 "field test is required for While");
1294 return NULL;
1295 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001296 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001297 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001298 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001299 p->kind = While_kind;
1300 p->v.While.test = test;
1301 p->v.While.body = body;
1302 p->v.While.orelse = orelse;
1303 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001304 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001305 return p;
1306}
1307
1308stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001309If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1310 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001311{
1312 stmt_ty p;
1313 if (!test) {
1314 PyErr_SetString(PyExc_ValueError,
1315 "field test is required for If");
1316 return NULL;
1317 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001318 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001319 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001320 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001321 p->kind = If_kind;
1322 p->v.If.test = test;
1323 p->v.If.body = body;
1324 p->v.If.orelse = orelse;
1325 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001326 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001327 return p;
1328}
1329
1330stmt_ty
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001331With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset, PyArena
1332 *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001333{
1334 stmt_ty p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001335 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001336 if (!p)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001337 return NULL;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001338 p->kind = With_kind;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05001339 p->v.With.items = items;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001340 p->v.With.body = body;
1341 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001342 p->col_offset = col_offset;
Guido van Rossumc2e20742006-02-27 22:32:47 +00001343 return p;
1344}
1345
1346stmt_ty
Collin Winter828f04a2007-08-31 00:04:24 +00001347Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001348{
1349 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001350 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001351 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001352 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001353 p->kind = Raise_kind;
Collin Winter828f04a2007-08-31 00:04:24 +00001354 p->v.Raise.exc = exc;
1355 p->v.Raise.cause = cause;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001356 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001357 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001358 return p;
1359}
1360
1361stmt_ty
Benjamin Peterson43af12b2011-05-29 11:43:10 -05001362Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, asdl_seq *
1363 finalbody, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001364{
1365 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001366 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001367 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001368 return NULL;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05001369 p->kind = Try_kind;
1370 p->v.Try.body = body;
1371 p->v.Try.handlers = handlers;
1372 p->v.Try.orelse = orelse;
1373 p->v.Try.finalbody = finalbody;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001374 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001375 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001376 return p;
1377}
1378
1379stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001380Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001381{
1382 stmt_ty p;
1383 if (!test) {
1384 PyErr_SetString(PyExc_ValueError,
1385 "field test is required for Assert");
1386 return NULL;
1387 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001388 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001389 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001390 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001391 p->kind = Assert_kind;
1392 p->v.Assert.test = test;
1393 p->v.Assert.msg = msg;
1394 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001395 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001396 return p;
1397}
1398
1399stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001400Import(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001401{
1402 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001403 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001404 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001405 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001406 p->kind = Import_kind;
1407 p->v.Import.names = names;
1408 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001409 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001410 return p;
1411}
1412
1413stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001414ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
1415 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001416{
1417 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001418 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001419 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001420 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001421 p->kind = ImportFrom_kind;
1422 p->v.ImportFrom.module = module;
1423 p->v.ImportFrom.names = names;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001424 p->v.ImportFrom.level = level;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001425 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001426 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001427 return p;
1428}
1429
1430stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001431Global(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001432{
1433 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001434 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001435 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001436 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001437 p->kind = Global_kind;
1438 p->v.Global.names = names;
1439 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001440 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001441 return p;
1442}
1443
1444stmt_ty
Jeremy Hylton81e95022007-02-27 06:50:52 +00001445Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
1446{
1447 stmt_ty p;
1448 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1449 if (!p)
1450 return NULL;
1451 p->kind = Nonlocal_kind;
1452 p->v.Nonlocal.names = names;
1453 p->lineno = lineno;
1454 p->col_offset = col_offset;
1455 return p;
1456}
1457
1458stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001459Expr(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001460{
1461 stmt_ty p;
1462 if (!value) {
1463 PyErr_SetString(PyExc_ValueError,
1464 "field value is required for Expr");
1465 return NULL;
1466 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001467 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001468 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001469 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001470 p->kind = Expr_kind;
1471 p->v.Expr.value = value;
1472 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001473 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001474 return p;
1475}
1476
1477stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001478Pass(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001479{
1480 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001481 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001482 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001483 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001484 p->kind = Pass_kind;
1485 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001486 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001487 return p;
1488}
1489
1490stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001491Break(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001492{
1493 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001494 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001495 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001496 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001497 p->kind = Break_kind;
1498 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001499 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001500 return p;
1501}
1502
1503stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001504Continue(int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001505{
1506 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001507 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001508 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001509 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001510 p->kind = Continue_kind;
1511 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001512 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001513 return p;
1514}
1515
1516expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001517BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena
1518 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001519{
1520 expr_ty p;
1521 if (!op) {
1522 PyErr_SetString(PyExc_ValueError,
1523 "field op is required for BoolOp");
1524 return NULL;
1525 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001526 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001527 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001528 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001529 p->kind = BoolOp_kind;
1530 p->v.BoolOp.op = op;
1531 p->v.BoolOp.values = values;
1532 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001533 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001534 return p;
1535}
1536
1537expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001538BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
1539 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001540{
1541 expr_ty p;
1542 if (!left) {
1543 PyErr_SetString(PyExc_ValueError,
1544 "field left is required for BinOp");
1545 return NULL;
1546 }
1547 if (!op) {
1548 PyErr_SetString(PyExc_ValueError,
1549 "field op is required for BinOp");
1550 return NULL;
1551 }
1552 if (!right) {
1553 PyErr_SetString(PyExc_ValueError,
1554 "field right is required for BinOp");
1555 return NULL;
1556 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001557 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001558 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001559 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001560 p->kind = BinOp_kind;
1561 p->v.BinOp.left = left;
1562 p->v.BinOp.op = op;
1563 p->v.BinOp.right = right;
1564 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001565 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001566 return p;
1567}
1568
1569expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001570UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena
1571 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001572{
1573 expr_ty p;
1574 if (!op) {
1575 PyErr_SetString(PyExc_ValueError,
1576 "field op is required for UnaryOp");
1577 return NULL;
1578 }
1579 if (!operand) {
1580 PyErr_SetString(PyExc_ValueError,
1581 "field operand is required for UnaryOp");
1582 return NULL;
1583 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001584 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001585 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001586 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001587 p->kind = UnaryOp_kind;
1588 p->v.UnaryOp.op = op;
1589 p->v.UnaryOp.operand = operand;
1590 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001591 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001592 return p;
1593}
1594
1595expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001596Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena
1597 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001598{
1599 expr_ty p;
1600 if (!args) {
1601 PyErr_SetString(PyExc_ValueError,
1602 "field args is required for Lambda");
1603 return NULL;
1604 }
1605 if (!body) {
1606 PyErr_SetString(PyExc_ValueError,
1607 "field body is required for Lambda");
1608 return NULL;
1609 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001610 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001611 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001612 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001613 p->kind = Lambda_kind;
1614 p->v.Lambda.args = args;
1615 p->v.Lambda.body = body;
1616 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001617 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001618 return p;
1619}
1620
1621expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001622IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
1623 PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001624{
1625 expr_ty p;
1626 if (!test) {
1627 PyErr_SetString(PyExc_ValueError,
1628 "field test is required for IfExp");
1629 return NULL;
1630 }
1631 if (!body) {
1632 PyErr_SetString(PyExc_ValueError,
1633 "field body is required for IfExp");
1634 return NULL;
1635 }
1636 if (!orelse) {
1637 PyErr_SetString(PyExc_ValueError,
1638 "field orelse is required for IfExp");
1639 return NULL;
1640 }
1641 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001642 if (!p)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001643 return NULL;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001644 p->kind = IfExp_kind;
1645 p->v.IfExp.test = test;
1646 p->v.IfExp.body = body;
1647 p->v.IfExp.orelse = orelse;
1648 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001649 p->col_offset = col_offset;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00001650 return p;
1651}
1652
1653expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001654Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena
1655 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001656{
1657 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001658 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001659 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001660 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001661 p->kind = Dict_kind;
1662 p->v.Dict.keys = keys;
1663 p->v.Dict.values = values;
1664 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001665 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001666 return p;
1667}
1668
1669expr_ty
Guido van Rossum86e58e22006-08-28 15:27:34 +00001670Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena)
1671{
1672 expr_ty p;
1673 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001674 if (!p)
Guido van Rossum86e58e22006-08-28 15:27:34 +00001675 return NULL;
Guido van Rossum86e58e22006-08-28 15:27:34 +00001676 p->kind = Set_kind;
1677 p->v.Set.elts = elts;
1678 p->lineno = lineno;
1679 p->col_offset = col_offset;
1680 return p;
1681}
1682
1683expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001684ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1685 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001686{
1687 expr_ty p;
1688 if (!elt) {
1689 PyErr_SetString(PyExc_ValueError,
1690 "field elt is required for ListComp");
1691 return NULL;
1692 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001693 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001694 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001695 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001696 p->kind = ListComp_kind;
1697 p->v.ListComp.elt = elt;
1698 p->v.ListComp.generators = generators;
1699 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001700 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001701 return p;
1702}
1703
1704expr_ty
Nick Coghlan650f0d02007-04-15 12:05:43 +00001705SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena
1706 *arena)
1707{
1708 expr_ty p;
1709 if (!elt) {
1710 PyErr_SetString(PyExc_ValueError,
1711 "field elt is required for SetComp");
1712 return NULL;
1713 }
1714 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1715 if (!p)
1716 return NULL;
1717 p->kind = SetComp_kind;
1718 p->v.SetComp.elt = elt;
1719 p->v.SetComp.generators = generators;
1720 p->lineno = lineno;
1721 p->col_offset = col_offset;
1722 return p;
1723}
1724
1725expr_ty
Guido van Rossum992d4a32007-07-11 13:09:30 +00001726DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
1727 col_offset, PyArena *arena)
1728{
1729 expr_ty p;
1730 if (!key) {
1731 PyErr_SetString(PyExc_ValueError,
1732 "field key is required for DictComp");
1733 return NULL;
1734 }
1735 if (!value) {
1736 PyErr_SetString(PyExc_ValueError,
1737 "field value is required for DictComp");
1738 return NULL;
1739 }
1740 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1741 if (!p)
1742 return NULL;
1743 p->kind = DictComp_kind;
1744 p->v.DictComp.key = key;
1745 p->v.DictComp.value = value;
1746 p->v.DictComp.generators = generators;
1747 p->lineno = lineno;
1748 p->col_offset = col_offset;
1749 return p;
1750}
1751
1752expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001753GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1754 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001755{
1756 expr_ty p;
1757 if (!elt) {
1758 PyErr_SetString(PyExc_ValueError,
1759 "field elt is required for GeneratorExp");
1760 return NULL;
1761 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001762 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001763 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001764 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001765 p->kind = GeneratorExp_kind;
1766 p->v.GeneratorExp.elt = elt;
1767 p->v.GeneratorExp.generators = generators;
1768 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001769 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001770 return p;
1771}
1772
1773expr_ty
Benjamin Peterson527c6222012-01-14 08:58:23 -05001774Yield(expr_ty value, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001775{
1776 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001777 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001778 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001779 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001780 p->kind = Yield_kind;
1781 p->v.Yield.value = value;
1782 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001783 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001784 return p;
1785}
1786
1787expr_ty
Benjamin Peterson527c6222012-01-14 08:58:23 -05001788YieldFrom(expr_ty value, int lineno, int col_offset, PyArena *arena)
1789{
1790 expr_ty p;
1791 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1792 if (!p)
1793 return NULL;
1794 p->kind = YieldFrom_kind;
1795 p->v.YieldFrom.value = value;
1796 p->lineno = lineno;
1797 p->col_offset = col_offset;
1798 return p;
1799}
1800
1801expr_ty
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001802Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
1803 int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001804{
1805 expr_ty p;
1806 if (!left) {
1807 PyErr_SetString(PyExc_ValueError,
1808 "field left is required for Compare");
1809 return NULL;
1810 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001811 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001812 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001813 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001814 p->kind = Compare_kind;
1815 p->v.Compare.left = left;
1816 p->v.Compare.ops = ops;
1817 p->v.Compare.comparators = comparators;
1818 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001819 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001820 return p;
1821}
1822
1823expr_ty
1824Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001825 expr_ty kwargs, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001826{
1827 expr_ty p;
1828 if (!func) {
1829 PyErr_SetString(PyExc_ValueError,
1830 "field func is required for Call");
1831 return NULL;
1832 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001833 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001834 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001835 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001836 p->kind = Call_kind;
1837 p->v.Call.func = func;
1838 p->v.Call.args = args;
1839 p->v.Call.keywords = keywords;
1840 p->v.Call.starargs = starargs;
1841 p->v.Call.kwargs = kwargs;
1842 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001843 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001844 return p;
1845}
1846
1847expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001848Num(object n, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001849{
1850 expr_ty p;
1851 if (!n) {
1852 PyErr_SetString(PyExc_ValueError,
1853 "field n is required for Num");
1854 return NULL;
1855 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001856 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001857 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001858 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001859 p->kind = Num_kind;
1860 p->v.Num.n = n;
1861 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001862 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001863 return p;
1864}
1865
1866expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001867Str(string s, int lineno, int col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001868{
1869 expr_ty p;
1870 if (!s) {
1871 PyErr_SetString(PyExc_ValueError,
1872 "field s is required for Str");
1873 return NULL;
1874 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001875 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001876 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001877 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001878 p->kind = Str_kind;
1879 p->v.Str.s = s;
1880 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001881 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001882 return p;
1883}
1884
1885expr_ty
Benjamin Petersone2498412011-08-09 16:08:39 -05001886Bytes(bytes s, int lineno, int col_offset, PyArena *arena)
Thomas Wouters00e41de2007-02-23 19:56:57 +00001887{
1888 expr_ty p;
1889 if (!s) {
1890 PyErr_SetString(PyExc_ValueError,
1891 "field s is required for Bytes");
1892 return NULL;
1893 }
1894 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001895 if (!p)
Thomas Wouters00e41de2007-02-23 19:56:57 +00001896 return NULL;
Thomas Wouters00e41de2007-02-23 19:56:57 +00001897 p->kind = Bytes_kind;
1898 p->v.Bytes.s = s;
1899 p->lineno = lineno;
1900 p->col_offset = col_offset;
1901 return p;
1902}
1903
1904expr_ty
Georg Brandl52318d62006-09-06 07:06:08 +00001905Ellipsis(int lineno, int col_offset, PyArena *arena)
1906{
1907 expr_ty p;
1908 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001909 if (!p)
Georg Brandl52318d62006-09-06 07:06:08 +00001910 return NULL;
Georg Brandl52318d62006-09-06 07:06:08 +00001911 p->kind = Ellipsis_kind;
1912 p->lineno = lineno;
1913 p->col_offset = col_offset;
1914 return p;
1915}
1916
1917expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001918Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
1919 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001920{
1921 expr_ty p;
1922 if (!value) {
1923 PyErr_SetString(PyExc_ValueError,
1924 "field value is required for Attribute");
1925 return NULL;
1926 }
1927 if (!attr) {
1928 PyErr_SetString(PyExc_ValueError,
1929 "field attr is required for Attribute");
1930 return NULL;
1931 }
1932 if (!ctx) {
1933 PyErr_SetString(PyExc_ValueError,
1934 "field ctx is required for Attribute");
1935 return NULL;
1936 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001937 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001938 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001939 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001940 p->kind = Attribute_kind;
1941 p->v.Attribute.value = value;
1942 p->v.Attribute.attr = attr;
1943 p->v.Attribute.ctx = ctx;
1944 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001945 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001946 return p;
1947}
1948
1949expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001950Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
1951 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001952{
1953 expr_ty p;
1954 if (!value) {
1955 PyErr_SetString(PyExc_ValueError,
1956 "field value is required for Subscript");
1957 return NULL;
1958 }
1959 if (!slice) {
1960 PyErr_SetString(PyExc_ValueError,
1961 "field slice is required for Subscript");
1962 return NULL;
1963 }
1964 if (!ctx) {
1965 PyErr_SetString(PyExc_ValueError,
1966 "field ctx is required for Subscript");
1967 return NULL;
1968 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001969 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00001970 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001971 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001972 p->kind = Subscript_kind;
1973 p->v.Subscript.value = value;
1974 p->v.Subscript.slice = slice;
1975 p->v.Subscript.ctx = ctx;
1976 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00001977 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001978 return p;
1979}
1980
1981expr_ty
Guido van Rossum0368b722007-05-11 16:50:42 +00001982Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, PyArena
1983 *arena)
1984{
1985 expr_ty p;
1986 if (!value) {
1987 PyErr_SetString(PyExc_ValueError,
1988 "field value is required for Starred");
1989 return NULL;
1990 }
1991 if (!ctx) {
1992 PyErr_SetString(PyExc_ValueError,
1993 "field ctx is required for Starred");
1994 return NULL;
1995 }
1996 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1997 if (!p)
1998 return NULL;
1999 p->kind = Starred_kind;
2000 p->v.Starred.value = value;
2001 p->v.Starred.ctx = ctx;
2002 p->lineno = lineno;
2003 p->col_offset = col_offset;
2004 return p;
2005}
2006
2007expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002008Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena
2009 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002010{
2011 expr_ty p;
2012 if (!id) {
2013 PyErr_SetString(PyExc_ValueError,
2014 "field id is required for Name");
2015 return NULL;
2016 }
2017 if (!ctx) {
2018 PyErr_SetString(PyExc_ValueError,
2019 "field ctx is required for Name");
2020 return NULL;
2021 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002022 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002023 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002024 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002025 p->kind = Name_kind;
2026 p->v.Name.id = id;
2027 p->v.Name.ctx = ctx;
2028 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002029 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002030 return p;
2031}
2032
2033expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002034List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
2035 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002036{
2037 expr_ty p;
2038 if (!ctx) {
2039 PyErr_SetString(PyExc_ValueError,
2040 "field ctx is required for List");
2041 return NULL;
2042 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002043 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002044 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002045 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002046 p->kind = List_kind;
2047 p->v.List.elts = elts;
2048 p->v.List.ctx = ctx;
2049 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002050 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002051 return p;
2052}
2053
2054expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002055Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
2056 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002057{
2058 expr_ty p;
2059 if (!ctx) {
2060 PyErr_SetString(PyExc_ValueError,
2061 "field ctx is required for Tuple");
2062 return NULL;
2063 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002064 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002065 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002066 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002067 p->kind = Tuple_kind;
2068 p->v.Tuple.elts = elts;
2069 p->v.Tuple.ctx = ctx;
2070 p->lineno = lineno;
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002071 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002072 return p;
2073}
2074
2075slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002076Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002077{
2078 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002079 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002080 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002081 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002082 p->kind = Slice_kind;
2083 p->v.Slice.lower = lower;
2084 p->v.Slice.upper = upper;
2085 p->v.Slice.step = step;
2086 return p;
2087}
2088
2089slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002090ExtSlice(asdl_seq * dims, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002091{
2092 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002093 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002094 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002095 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002096 p->kind = ExtSlice_kind;
2097 p->v.ExtSlice.dims = dims;
2098 return p;
2099}
2100
2101slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002102Index(expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002103{
2104 slice_ty p;
2105 if (!value) {
2106 PyErr_SetString(PyExc_ValueError,
2107 "field value is required for Index");
2108 return NULL;
2109 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002110 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002111 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002112 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002113 p->kind = Index_kind;
2114 p->v.Index.value = value;
2115 return p;
2116}
2117
2118comprehension_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002119comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002120{
2121 comprehension_ty p;
2122 if (!target) {
2123 PyErr_SetString(PyExc_ValueError,
2124 "field target is required for comprehension");
2125 return NULL;
2126 }
2127 if (!iter) {
2128 PyErr_SetString(PyExc_ValueError,
2129 "field iter is required for comprehension");
2130 return NULL;
2131 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002132 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002133 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002134 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002135 p->target = target;
2136 p->iter = iter;
2137 p->ifs = ifs;
2138 return p;
2139}
2140
2141excepthandler_ty
Neal Norwitzad74aa82008-03-31 05:14:30 +00002142ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002143 col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002144{
2145 excepthandler_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002146 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002147 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002148 return NULL;
Neal Norwitzad74aa82008-03-31 05:14:30 +00002149 p->kind = ExceptHandler_kind;
2150 p->v.ExceptHandler.type = type;
2151 p->v.ExceptHandler.name = name;
2152 p->v.ExceptHandler.body = body;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002153 p->lineno = lineno;
2154 p->col_offset = col_offset;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002155 return p;
2156}
2157
2158arguments_ty
Neal Norwitzc1505362006-12-28 06:47:50 +00002159arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation,
2160 asdl_seq * kwonlyargs, identifier kwarg, expr_ty kwargannotation,
2161 asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002162{
2163 arguments_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002164 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002165 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002166 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002167 p->args = args;
2168 p->vararg = vararg;
Neal Norwitzc1505362006-12-28 06:47:50 +00002169 p->varargannotation = varargannotation;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002170 p->kwonlyargs = kwonlyargs;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002171 p->kwarg = kwarg;
Neal Norwitzc1505362006-12-28 06:47:50 +00002172 p->kwargannotation = kwargannotation;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002173 p->defaults = defaults;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002174 p->kw_defaults = kw_defaults;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002175 return p;
2176}
2177
Neal Norwitzc1505362006-12-28 06:47:50 +00002178arg_ty
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002179arg(identifier arg, expr_ty annotation, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00002180{
2181 arg_ty p;
2182 if (!arg) {
2183 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002184 "field arg is required for arg");
Neal Norwitzc1505362006-12-28 06:47:50 +00002185 return NULL;
2186 }
2187 p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002188 if (!p)
Neal Norwitzc1505362006-12-28 06:47:50 +00002189 return NULL;
Guido van Rossum1bc535d2007-05-15 18:46:22 +00002190 p->arg = arg;
2191 p->annotation = annotation;
Neal Norwitzc1505362006-12-28 06:47:50 +00002192 return p;
2193}
2194
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002195keyword_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002196keyword(identifier arg, expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002197{
2198 keyword_ty p;
2199 if (!arg) {
2200 PyErr_SetString(PyExc_ValueError,
2201 "field arg is required for keyword");
2202 return NULL;
2203 }
2204 if (!value) {
2205 PyErr_SetString(PyExc_ValueError,
2206 "field value is required for keyword");
2207 return NULL;
2208 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002209 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002210 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002211 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002212 p->arg = arg;
2213 p->value = value;
2214 return p;
2215}
2216
2217alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002218alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002219{
2220 alias_ty p;
2221 if (!name) {
2222 PyErr_SetString(PyExc_ValueError,
2223 "field name is required for alias");
2224 return NULL;
2225 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00002226 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
Thomas Woutersa44f3a32007-02-26 18:20:15 +00002227 if (!p)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002228 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002229 p->name = name;
2230 p->asname = asname;
2231 return p;
2232}
2233
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05002234withitem_ty
2235withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
2236{
2237 withitem_ty p;
2238 if (!context_expr) {
2239 PyErr_SetString(PyExc_ValueError,
2240 "field context_expr is required for withitem");
2241 return NULL;
2242 }
2243 p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
2244 if (!p)
2245 return NULL;
2246 p->context_expr = context_expr;
2247 p->optional_vars = optional_vars;
2248 return p;
2249}
2250
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002251
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002252PyObject*
2253ast2obj_mod(void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002254{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002255 mod_ty o = (mod_ty)_o;
2256 PyObject *result = NULL, *value = NULL;
2257 if (!o) {
2258 Py_INCREF(Py_None);
2259 return Py_None;
2260 }
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002261
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002262 switch (o->kind) {
2263 case Module_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002264 result = PyType_GenericNew(Module_type, NULL, NULL);
2265 if (!result) goto failed;
2266 value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
2267 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002268 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002269 goto failed;
2270 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002271 break;
2272 case Interactive_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002273 result = PyType_GenericNew(Interactive_type, NULL, NULL);
2274 if (!result) goto failed;
2275 value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
2276 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002277 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002278 goto failed;
2279 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002280 break;
2281 case Expression_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002282 result = PyType_GenericNew(Expression_type, NULL, NULL);
2283 if (!result) goto failed;
2284 value = ast2obj_expr(o->v.Expression.body);
2285 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002286 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002287 goto failed;
2288 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002289 break;
2290 case Suite_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002291 result = PyType_GenericNew(Suite_type, NULL, NULL);
2292 if (!result) goto failed;
2293 value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
2294 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002295 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002296 goto failed;
2297 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002298 break;
2299 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002300 return result;
2301failed:
2302 Py_XDECREF(value);
2303 Py_XDECREF(result);
2304 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002305}
2306
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002307PyObject*
2308ast2obj_stmt(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002309{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002310 stmt_ty o = (stmt_ty)_o;
2311 PyObject *result = NULL, *value = NULL;
2312 if (!o) {
2313 Py_INCREF(Py_None);
2314 return Py_None;
2315 }
2316
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002317 switch (o->kind) {
2318 case FunctionDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002319 result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
2320 if (!result) goto failed;
2321 value = ast2obj_identifier(o->v.FunctionDef.name);
2322 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002323 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002324 goto failed;
2325 Py_DECREF(value);
2326 value = ast2obj_arguments(o->v.FunctionDef.args);
2327 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002328 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002329 goto failed;
2330 Py_DECREF(value);
2331 value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
2332 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002333 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002334 goto failed;
2335 Py_DECREF(value);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002336 value = ast2obj_list(o->v.FunctionDef.decorator_list,
2337 ast2obj_expr);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002338 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002339 if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) ==
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002340 -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002341 goto failed;
2342 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00002343 value = ast2obj_expr(o->v.FunctionDef.returns);
2344 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002345 if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00002346 goto failed;
2347 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002348 break;
2349 case ClassDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002350 result = PyType_GenericNew(ClassDef_type, NULL, NULL);
2351 if (!result) goto failed;
2352 value = ast2obj_identifier(o->v.ClassDef.name);
2353 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002354 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002355 goto failed;
2356 Py_DECREF(value);
2357 value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
2358 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002359 if (_PyObject_SetAttrId(result, &PyId_bases, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002360 goto failed;
2361 Py_DECREF(value);
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002362 value = ast2obj_list(o->v.ClassDef.keywords, ast2obj_keyword);
2363 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002364 if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002365 goto failed;
2366 Py_DECREF(value);
2367 value = ast2obj_expr(o->v.ClassDef.starargs);
2368 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002369 if (_PyObject_SetAttrId(result, &PyId_starargs, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002370 goto failed;
2371 Py_DECREF(value);
2372 value = ast2obj_expr(o->v.ClassDef.kwargs);
2373 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002374 if (_PyObject_SetAttrId(result, &PyId_kwargs, value) == -1)
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002375 goto failed;
2376 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002377 value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
2378 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002379 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002380 goto failed;
2381 Py_DECREF(value);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002382 value = ast2obj_list(o->v.ClassDef.decorator_list,
2383 ast2obj_expr);
2384 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002385 if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) ==
Guido van Rossumd59da4b2007-05-22 18:11:13 +00002386 -1)
2387 goto failed;
2388 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002389 break;
2390 case Return_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002391 result = PyType_GenericNew(Return_type, NULL, NULL);
2392 if (!result) goto failed;
2393 value = ast2obj_expr(o->v.Return.value);
2394 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002395 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002396 goto failed;
2397 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002398 break;
2399 case Delete_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002400 result = PyType_GenericNew(Delete_type, NULL, NULL);
2401 if (!result) goto failed;
2402 value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
2403 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002404 if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002405 goto failed;
2406 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002407 break;
2408 case Assign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002409 result = PyType_GenericNew(Assign_type, NULL, NULL);
2410 if (!result) goto failed;
2411 value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
2412 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002413 if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002414 goto failed;
2415 Py_DECREF(value);
2416 value = ast2obj_expr(o->v.Assign.value);
2417 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002418 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002419 goto failed;
2420 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002421 break;
2422 case AugAssign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002423 result = PyType_GenericNew(AugAssign_type, NULL, NULL);
2424 if (!result) goto failed;
2425 value = ast2obj_expr(o->v.AugAssign.target);
2426 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002427 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002428 goto failed;
2429 Py_DECREF(value);
2430 value = ast2obj_operator(o->v.AugAssign.op);
2431 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002432 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002433 goto failed;
2434 Py_DECREF(value);
2435 value = ast2obj_expr(o->v.AugAssign.value);
2436 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002437 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002438 goto failed;
2439 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002440 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002441 case For_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002442 result = PyType_GenericNew(For_type, NULL, NULL);
2443 if (!result) goto failed;
2444 value = ast2obj_expr(o->v.For.target);
2445 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002446 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002447 goto failed;
2448 Py_DECREF(value);
2449 value = ast2obj_expr(o->v.For.iter);
2450 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002451 if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002452 goto failed;
2453 Py_DECREF(value);
2454 value = ast2obj_list(o->v.For.body, ast2obj_stmt);
2455 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002456 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002457 goto failed;
2458 Py_DECREF(value);
2459 value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
2460 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002461 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002462 goto failed;
2463 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002464 break;
2465 case While_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002466 result = PyType_GenericNew(While_type, NULL, NULL);
2467 if (!result) goto failed;
2468 value = ast2obj_expr(o->v.While.test);
2469 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002470 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002471 goto failed;
2472 Py_DECREF(value);
2473 value = ast2obj_list(o->v.While.body, ast2obj_stmt);
2474 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002475 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002476 goto failed;
2477 Py_DECREF(value);
2478 value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
2479 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002480 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002481 goto failed;
2482 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002483 break;
2484 case If_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002485 result = PyType_GenericNew(If_type, NULL, NULL);
2486 if (!result) goto failed;
2487 value = ast2obj_expr(o->v.If.test);
2488 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002489 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002490 goto failed;
2491 Py_DECREF(value);
2492 value = ast2obj_list(o->v.If.body, ast2obj_stmt);
2493 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002494 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002495 goto failed;
2496 Py_DECREF(value);
2497 value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
2498 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002499 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002500 goto failed;
2501 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002502 break;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002503 case With_kind:
2504 result = PyType_GenericNew(With_type, NULL, NULL);
2505 if (!result) goto failed;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05002506 value = ast2obj_list(o->v.With.items, ast2obj_withitem);
Guido van Rossumc2e20742006-02-27 22:32:47 +00002507 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002508 if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002509 goto failed;
2510 Py_DECREF(value);
2511 value = ast2obj_list(o->v.With.body, ast2obj_stmt);
2512 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002513 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002514 goto failed;
2515 Py_DECREF(value);
2516 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002517 case Raise_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002518 result = PyType_GenericNew(Raise_type, NULL, NULL);
2519 if (!result) goto failed;
Collin Winter828f04a2007-08-31 00:04:24 +00002520 value = ast2obj_expr(o->v.Raise.exc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002521 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002522 if (_PyObject_SetAttrId(result, &PyId_exc, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002523 goto failed;
2524 Py_DECREF(value);
Collin Winter828f04a2007-08-31 00:04:24 +00002525 value = ast2obj_expr(o->v.Raise.cause);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002526 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002527 if (_PyObject_SetAttrId(result, &PyId_cause, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002528 goto failed;
2529 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002530 break;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002531 case Try_kind:
2532 result = PyType_GenericNew(Try_type, NULL, NULL);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002533 if (!result) goto failed;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002534 value = ast2obj_list(o->v.Try.body, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002535 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002536 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002537 goto failed;
2538 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002539 value = ast2obj_list(o->v.Try.handlers, ast2obj_excepthandler);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002540 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002541 if (_PyObject_SetAttrId(result, &PyId_handlers, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002542 goto failed;
2543 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002544 value = ast2obj_list(o->v.Try.orelse, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002545 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002546 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002547 goto failed;
2548 Py_DECREF(value);
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002549 value = ast2obj_list(o->v.Try.finalbody, ast2obj_stmt);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002550 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002551 if (_PyObject_SetAttrId(result, &PyId_finalbody, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002552 goto failed;
2553 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002554 break;
2555 case Assert_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002556 result = PyType_GenericNew(Assert_type, NULL, NULL);
2557 if (!result) goto failed;
2558 value = ast2obj_expr(o->v.Assert.test);
2559 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002560 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002561 goto failed;
2562 Py_DECREF(value);
2563 value = ast2obj_expr(o->v.Assert.msg);
2564 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002565 if (_PyObject_SetAttrId(result, &PyId_msg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002566 goto failed;
2567 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002568 break;
2569 case Import_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002570 result = PyType_GenericNew(Import_type, NULL, NULL);
2571 if (!result) goto failed;
2572 value = ast2obj_list(o->v.Import.names, ast2obj_alias);
2573 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002574 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002575 goto failed;
2576 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002577 break;
2578 case ImportFrom_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002579 result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
2580 if (!result) goto failed;
2581 value = ast2obj_identifier(o->v.ImportFrom.module);
2582 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002583 if (_PyObject_SetAttrId(result, &PyId_module, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002584 goto failed;
2585 Py_DECREF(value);
2586 value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
2587 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002588 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002589 goto failed;
2590 Py_DECREF(value);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002591 value = ast2obj_int(o->v.ImportFrom.level);
2592 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002593 if (_PyObject_SetAttrId(result, &PyId_level, value) == -1)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002594 goto failed;
2595 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002596 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002597 case Global_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002598 result = PyType_GenericNew(Global_type, NULL, NULL);
2599 if (!result) goto failed;
2600 value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
2601 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002602 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002603 goto failed;
2604 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002605 break;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002606 case Nonlocal_kind:
2607 result = PyType_GenericNew(Nonlocal_type, NULL, NULL);
2608 if (!result) goto failed;
2609 value = ast2obj_list(o->v.Nonlocal.names, ast2obj_identifier);
2610 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002611 if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002612 goto failed;
2613 Py_DECREF(value);
2614 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002615 case Expr_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002616 result = PyType_GenericNew(Expr_type, NULL, NULL);
2617 if (!result) goto failed;
2618 value = ast2obj_expr(o->v.Expr.value);
2619 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002620 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002621 goto failed;
2622 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002623 break;
2624 case Pass_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002625 result = PyType_GenericNew(Pass_type, NULL, NULL);
2626 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002627 break;
2628 case Break_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002629 result = PyType_GenericNew(Break_type, NULL, NULL);
2630 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002631 break;
2632 case Continue_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002633 result = PyType_GenericNew(Continue_type, NULL, NULL);
2634 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002635 break;
2636 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00002637 value = ast2obj_int(o->lineno);
2638 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002639 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00002640 goto failed;
2641 Py_DECREF(value);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002642 value = ast2obj_int(o->col_offset);
2643 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002644 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00002645 goto failed;
2646 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002647 return result;
2648failed:
2649 Py_XDECREF(value);
2650 Py_XDECREF(result);
2651 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002652}
2653
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002654PyObject*
2655ast2obj_expr(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002656{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002657 expr_ty o = (expr_ty)_o;
2658 PyObject *result = NULL, *value = NULL;
2659 if (!o) {
2660 Py_INCREF(Py_None);
2661 return Py_None;
2662 }
2663
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002664 switch (o->kind) {
2665 case BoolOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002666 result = PyType_GenericNew(BoolOp_type, NULL, NULL);
2667 if (!result) goto failed;
2668 value = ast2obj_boolop(o->v.BoolOp.op);
2669 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002670 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002671 goto failed;
2672 Py_DECREF(value);
2673 value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
2674 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002675 if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002676 goto failed;
2677 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002678 break;
2679 case BinOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002680 result = PyType_GenericNew(BinOp_type, NULL, NULL);
2681 if (!result) goto failed;
2682 value = ast2obj_expr(o->v.BinOp.left);
2683 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002684 if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002685 goto failed;
2686 Py_DECREF(value);
2687 value = ast2obj_operator(o->v.BinOp.op);
2688 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002689 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002690 goto failed;
2691 Py_DECREF(value);
2692 value = ast2obj_expr(o->v.BinOp.right);
2693 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002694 if (_PyObject_SetAttrId(result, &PyId_right, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002695 goto failed;
2696 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002697 break;
2698 case UnaryOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002699 result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
2700 if (!result) goto failed;
2701 value = ast2obj_unaryop(o->v.UnaryOp.op);
2702 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002703 if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002704 goto failed;
2705 Py_DECREF(value);
2706 value = ast2obj_expr(o->v.UnaryOp.operand);
2707 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002708 if (_PyObject_SetAttrId(result, &PyId_operand, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002709 goto failed;
2710 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002711 break;
2712 case Lambda_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002713 result = PyType_GenericNew(Lambda_type, NULL, NULL);
2714 if (!result) goto failed;
2715 value = ast2obj_arguments(o->v.Lambda.args);
2716 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002717 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002718 goto failed;
2719 Py_DECREF(value);
2720 value = ast2obj_expr(o->v.Lambda.body);
2721 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002722 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002723 goto failed;
2724 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002725 break;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002726 case IfExp_kind:
2727 result = PyType_GenericNew(IfExp_type, NULL, NULL);
2728 if (!result) goto failed;
2729 value = ast2obj_expr(o->v.IfExp.test);
2730 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002731 if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002732 goto failed;
2733 Py_DECREF(value);
2734 value = ast2obj_expr(o->v.IfExp.body);
2735 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002736 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002737 goto failed;
2738 Py_DECREF(value);
2739 value = ast2obj_expr(o->v.IfExp.orelse);
2740 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002741 if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002742 goto failed;
2743 Py_DECREF(value);
2744 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002745 case Dict_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002746 result = PyType_GenericNew(Dict_type, NULL, NULL);
2747 if (!result) goto failed;
2748 value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
2749 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002750 if (_PyObject_SetAttrId(result, &PyId_keys, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002751 goto failed;
2752 Py_DECREF(value);
2753 value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
2754 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002755 if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002756 goto failed;
2757 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002758 break;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002759 case Set_kind:
2760 result = PyType_GenericNew(Set_type, NULL, NULL);
2761 if (!result) goto failed;
2762 value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
2763 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002764 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002765 goto failed;
2766 Py_DECREF(value);
2767 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002768 case ListComp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002769 result = PyType_GenericNew(ListComp_type, NULL, NULL);
2770 if (!result) goto failed;
2771 value = ast2obj_expr(o->v.ListComp.elt);
2772 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002773 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002774 goto failed;
2775 Py_DECREF(value);
2776 value = ast2obj_list(o->v.ListComp.generators,
2777 ast2obj_comprehension);
2778 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002779 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002780 goto failed;
2781 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002782 break;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002783 case SetComp_kind:
2784 result = PyType_GenericNew(SetComp_type, NULL, NULL);
2785 if (!result) goto failed;
2786 value = ast2obj_expr(o->v.SetComp.elt);
2787 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002788 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002789 goto failed;
2790 Py_DECREF(value);
2791 value = ast2obj_list(o->v.SetComp.generators,
2792 ast2obj_comprehension);
2793 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002794 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002795 goto failed;
2796 Py_DECREF(value);
2797 break;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002798 case DictComp_kind:
2799 result = PyType_GenericNew(DictComp_type, NULL, NULL);
2800 if (!result) goto failed;
2801 value = ast2obj_expr(o->v.DictComp.key);
2802 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002803 if (_PyObject_SetAttrId(result, &PyId_key, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002804 goto failed;
2805 Py_DECREF(value);
2806 value = ast2obj_expr(o->v.DictComp.value);
2807 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002808 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002809 goto failed;
2810 Py_DECREF(value);
2811 value = ast2obj_list(o->v.DictComp.generators,
2812 ast2obj_comprehension);
2813 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002814 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002815 goto failed;
2816 Py_DECREF(value);
2817 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002818 case GeneratorExp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002819 result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
2820 if (!result) goto failed;
2821 value = ast2obj_expr(o->v.GeneratorExp.elt);
2822 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002823 if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002824 goto failed;
2825 Py_DECREF(value);
2826 value = ast2obj_list(o->v.GeneratorExp.generators,
2827 ast2obj_comprehension);
2828 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002829 if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002830 goto failed;
2831 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002832 break;
2833 case Yield_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002834 result = PyType_GenericNew(Yield_type, NULL, NULL);
2835 if (!result) goto failed;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002836 value = ast2obj_expr(o->v.Yield.value);
Nick Coghlan1f7ce622012-01-13 21:43:40 +10002837 if (!value) goto failed;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002838 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Nick Coghlan1f7ce622012-01-13 21:43:40 +10002839 goto failed;
2840 Py_DECREF(value);
Benjamin Peterson527c6222012-01-14 08:58:23 -05002841 break;
2842 case YieldFrom_kind:
2843 result = PyType_GenericNew(YieldFrom_type, NULL, NULL);
2844 if (!result) goto failed;
2845 value = ast2obj_expr(o->v.YieldFrom.value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002846 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002847 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002848 goto failed;
2849 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002850 break;
2851 case Compare_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002852 result = PyType_GenericNew(Compare_type, NULL, NULL);
2853 if (!result) goto failed;
2854 value = ast2obj_expr(o->v.Compare.left);
2855 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002856 if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002857 goto failed;
2858 Py_DECREF(value);
Martin v. Löwisce1d5d22006-02-26 20:51:25 +00002859 {
2860 int i, n = asdl_seq_LEN(o->v.Compare.ops);
2861 value = PyList_New(n);
2862 if (!value) goto failed;
2863 for(i = 0; i < n; i++)
2864 PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
2865 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002866 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002867 if (_PyObject_SetAttrId(result, &PyId_ops, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002868 goto failed;
2869 Py_DECREF(value);
2870 value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
2871 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002872 if (_PyObject_SetAttrId(result, &PyId_comparators, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002873 goto failed;
2874 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002875 break;
2876 case Call_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002877 result = PyType_GenericNew(Call_type, NULL, NULL);
2878 if (!result) goto failed;
2879 value = ast2obj_expr(o->v.Call.func);
2880 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002881 if (_PyObject_SetAttrId(result, &PyId_func, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002882 goto failed;
2883 Py_DECREF(value);
2884 value = ast2obj_list(o->v.Call.args, ast2obj_expr);
2885 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002886 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002887 goto failed;
2888 Py_DECREF(value);
2889 value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
2890 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002891 if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002892 goto failed;
2893 Py_DECREF(value);
2894 value = ast2obj_expr(o->v.Call.starargs);
2895 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002896 if (_PyObject_SetAttrId(result, &PyId_starargs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002897 goto failed;
2898 Py_DECREF(value);
2899 value = ast2obj_expr(o->v.Call.kwargs);
2900 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002901 if (_PyObject_SetAttrId(result, &PyId_kwargs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002902 goto failed;
2903 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002904 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002905 case Num_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002906 result = PyType_GenericNew(Num_type, NULL, NULL);
2907 if (!result) goto failed;
2908 value = ast2obj_object(o->v.Num.n);
2909 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002910 if (_PyObject_SetAttrId(result, &PyId_n, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002911 goto failed;
2912 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002913 break;
2914 case Str_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002915 result = PyType_GenericNew(Str_type, NULL, NULL);
2916 if (!result) goto failed;
2917 value = ast2obj_string(o->v.Str.s);
2918 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002919 if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002920 goto failed;
2921 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002922 break;
Thomas Wouters00e41de2007-02-23 19:56:57 +00002923 case Bytes_kind:
2924 result = PyType_GenericNew(Bytes_type, NULL, NULL);
2925 if (!result) goto failed;
Benjamin Petersone2498412011-08-09 16:08:39 -05002926 value = ast2obj_bytes(o->v.Bytes.s);
Thomas Wouters00e41de2007-02-23 19:56:57 +00002927 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002928 if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
Thomas Wouters00e41de2007-02-23 19:56:57 +00002929 goto failed;
2930 Py_DECREF(value);
2931 break;
Georg Brandl52318d62006-09-06 07:06:08 +00002932 case Ellipsis_kind:
2933 result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
2934 if (!result) goto failed;
2935 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002936 case Attribute_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002937 result = PyType_GenericNew(Attribute_type, NULL, NULL);
2938 if (!result) goto failed;
2939 value = ast2obj_expr(o->v.Attribute.value);
2940 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002941 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002942 goto failed;
2943 Py_DECREF(value);
2944 value = ast2obj_identifier(o->v.Attribute.attr);
2945 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002946 if (_PyObject_SetAttrId(result, &PyId_attr, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002947 goto failed;
2948 Py_DECREF(value);
2949 value = ast2obj_expr_context(o->v.Attribute.ctx);
2950 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002951 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002952 goto failed;
2953 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002954 break;
2955 case Subscript_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002956 result = PyType_GenericNew(Subscript_type, NULL, NULL);
2957 if (!result) goto failed;
2958 value = ast2obj_expr(o->v.Subscript.value);
2959 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002960 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002961 goto failed;
2962 Py_DECREF(value);
2963 value = ast2obj_slice(o->v.Subscript.slice);
2964 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002965 if (_PyObject_SetAttrId(result, &PyId_slice, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002966 goto failed;
2967 Py_DECREF(value);
2968 value = ast2obj_expr_context(o->v.Subscript.ctx);
2969 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002970 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002971 goto failed;
2972 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002973 break;
Guido van Rossum0368b722007-05-11 16:50:42 +00002974 case Starred_kind:
2975 result = PyType_GenericNew(Starred_type, NULL, NULL);
2976 if (!result) goto failed;
2977 value = ast2obj_expr(o->v.Starred.value);
2978 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002979 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Guido van Rossum0368b722007-05-11 16:50:42 +00002980 goto failed;
2981 Py_DECREF(value);
2982 value = ast2obj_expr_context(o->v.Starred.ctx);
2983 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002984 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Guido van Rossum0368b722007-05-11 16:50:42 +00002985 goto failed;
2986 Py_DECREF(value);
2987 break;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002988 case Name_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002989 result = PyType_GenericNew(Name_type, NULL, NULL);
2990 if (!result) goto failed;
2991 value = ast2obj_identifier(o->v.Name.id);
2992 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002993 if (_PyObject_SetAttrId(result, &PyId_id, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002994 goto failed;
2995 Py_DECREF(value);
2996 value = ast2obj_expr_context(o->v.Name.ctx);
2997 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02002998 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002999 goto failed;
3000 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003001 break;
3002 case List_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003003 result = PyType_GenericNew(List_type, NULL, NULL);
3004 if (!result) goto failed;
3005 value = ast2obj_list(o->v.List.elts, ast2obj_expr);
3006 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003007 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003008 goto failed;
3009 Py_DECREF(value);
3010 value = ast2obj_expr_context(o->v.List.ctx);
3011 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003012 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003013 goto failed;
3014 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003015 break;
3016 case Tuple_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003017 result = PyType_GenericNew(Tuple_type, NULL, NULL);
3018 if (!result) goto failed;
3019 value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
3020 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003021 if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003022 goto failed;
3023 Py_DECREF(value);
3024 value = ast2obj_expr_context(o->v.Tuple.ctx);
3025 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003026 if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003027 goto failed;
3028 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003029 break;
3030 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003031 value = ast2obj_int(o->lineno);
3032 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003033 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003034 goto failed;
3035 Py_DECREF(value);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003036 value = ast2obj_int(o->col_offset);
3037 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003038 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003039 goto failed;
3040 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003041 return result;
3042failed:
3043 Py_XDECREF(value);
3044 Py_XDECREF(result);
3045 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003046}
3047
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003048PyObject* ast2obj_expr_context(expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003049{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003050 switch(o) {
3051 case Load:
3052 Py_INCREF(Load_singleton);
3053 return Load_singleton;
3054 case Store:
3055 Py_INCREF(Store_singleton);
3056 return Store_singleton;
3057 case Del:
3058 Py_INCREF(Del_singleton);
3059 return Del_singleton;
3060 case AugLoad:
3061 Py_INCREF(AugLoad_singleton);
3062 return AugLoad_singleton;
3063 case AugStore:
3064 Py_INCREF(AugStore_singleton);
3065 return AugStore_singleton;
3066 case Param:
3067 Py_INCREF(Param_singleton);
3068 return Param_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003069 default:
3070 /* should never happen, but just in case ... */
3071 PyErr_Format(PyExc_SystemError, "unknown expr_context found");
3072 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003073 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003074}
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003075PyObject*
3076ast2obj_slice(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003077{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003078 slice_ty o = (slice_ty)_o;
3079 PyObject *result = NULL, *value = NULL;
3080 if (!o) {
3081 Py_INCREF(Py_None);
3082 return Py_None;
3083 }
3084
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003085 switch (o->kind) {
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003086 case Slice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003087 result = PyType_GenericNew(Slice_type, NULL, NULL);
3088 if (!result) goto failed;
3089 value = ast2obj_expr(o->v.Slice.lower);
3090 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003091 if (_PyObject_SetAttrId(result, &PyId_lower, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003092 goto failed;
3093 Py_DECREF(value);
3094 value = ast2obj_expr(o->v.Slice.upper);
3095 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003096 if (_PyObject_SetAttrId(result, &PyId_upper, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003097 goto failed;
3098 Py_DECREF(value);
3099 value = ast2obj_expr(o->v.Slice.step);
3100 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003101 if (_PyObject_SetAttrId(result, &PyId_step, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003102 goto failed;
3103 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003104 break;
3105 case ExtSlice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003106 result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
3107 if (!result) goto failed;
3108 value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
3109 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003110 if (_PyObject_SetAttrId(result, &PyId_dims, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003111 goto failed;
3112 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003113 break;
3114 case Index_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003115 result = PyType_GenericNew(Index_type, NULL, NULL);
3116 if (!result) goto failed;
3117 value = ast2obj_expr(o->v.Index.value);
3118 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003119 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003120 goto failed;
3121 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003122 break;
3123 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003124 return result;
3125failed:
3126 Py_XDECREF(value);
3127 Py_XDECREF(result);
3128 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003129}
3130
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003131PyObject* ast2obj_boolop(boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003132{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003133 switch(o) {
3134 case And:
3135 Py_INCREF(And_singleton);
3136 return And_singleton;
3137 case Or:
3138 Py_INCREF(Or_singleton);
3139 return Or_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003140 default:
3141 /* should never happen, but just in case ... */
3142 PyErr_Format(PyExc_SystemError, "unknown boolop found");
3143 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003144 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003145}
3146PyObject* ast2obj_operator(operator_ty o)
3147{
3148 switch(o) {
3149 case Add:
3150 Py_INCREF(Add_singleton);
3151 return Add_singleton;
3152 case Sub:
3153 Py_INCREF(Sub_singleton);
3154 return Sub_singleton;
3155 case Mult:
3156 Py_INCREF(Mult_singleton);
3157 return Mult_singleton;
3158 case Div:
3159 Py_INCREF(Div_singleton);
3160 return Div_singleton;
3161 case Mod:
3162 Py_INCREF(Mod_singleton);
3163 return Mod_singleton;
3164 case Pow:
3165 Py_INCREF(Pow_singleton);
3166 return Pow_singleton;
3167 case LShift:
3168 Py_INCREF(LShift_singleton);
3169 return LShift_singleton;
3170 case RShift:
3171 Py_INCREF(RShift_singleton);
3172 return RShift_singleton;
3173 case BitOr:
3174 Py_INCREF(BitOr_singleton);
3175 return BitOr_singleton;
3176 case BitXor:
3177 Py_INCREF(BitXor_singleton);
3178 return BitXor_singleton;
3179 case BitAnd:
3180 Py_INCREF(BitAnd_singleton);
3181 return BitAnd_singleton;
3182 case FloorDiv:
3183 Py_INCREF(FloorDiv_singleton);
3184 return FloorDiv_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003185 default:
3186 /* should never happen, but just in case ... */
3187 PyErr_Format(PyExc_SystemError, "unknown operator found");
3188 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003189 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003190}
3191PyObject* ast2obj_unaryop(unaryop_ty o)
3192{
3193 switch(o) {
3194 case Invert:
3195 Py_INCREF(Invert_singleton);
3196 return Invert_singleton;
3197 case Not:
3198 Py_INCREF(Not_singleton);
3199 return Not_singleton;
3200 case UAdd:
3201 Py_INCREF(UAdd_singleton);
3202 return UAdd_singleton;
3203 case USub:
3204 Py_INCREF(USub_singleton);
3205 return USub_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003206 default:
3207 /* should never happen, but just in case ... */
3208 PyErr_Format(PyExc_SystemError, "unknown unaryop found");
3209 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003210 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003211}
3212PyObject* ast2obj_cmpop(cmpop_ty o)
3213{
3214 switch(o) {
3215 case Eq:
3216 Py_INCREF(Eq_singleton);
3217 return Eq_singleton;
3218 case NotEq:
3219 Py_INCREF(NotEq_singleton);
3220 return NotEq_singleton;
3221 case Lt:
3222 Py_INCREF(Lt_singleton);
3223 return Lt_singleton;
3224 case LtE:
3225 Py_INCREF(LtE_singleton);
3226 return LtE_singleton;
3227 case Gt:
3228 Py_INCREF(Gt_singleton);
3229 return Gt_singleton;
3230 case GtE:
3231 Py_INCREF(GtE_singleton);
3232 return GtE_singleton;
3233 case Is:
3234 Py_INCREF(Is_singleton);
3235 return Is_singleton;
3236 case IsNot:
3237 Py_INCREF(IsNot_singleton);
3238 return IsNot_singleton;
3239 case In:
3240 Py_INCREF(In_singleton);
3241 return In_singleton;
3242 case NotIn:
3243 Py_INCREF(NotIn_singleton);
3244 return NotIn_singleton;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003245 default:
3246 /* should never happen, but just in case ... */
3247 PyErr_Format(PyExc_SystemError, "unknown cmpop found");
3248 return NULL;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003249 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003250}
3251PyObject*
3252ast2obj_comprehension(void* _o)
3253{
3254 comprehension_ty o = (comprehension_ty)_o;
3255 PyObject *result = NULL, *value = NULL;
3256 if (!o) {
3257 Py_INCREF(Py_None);
3258 return Py_None;
3259 }
3260
3261 result = PyType_GenericNew(comprehension_type, NULL, NULL);
3262 if (!result) return NULL;
3263 value = ast2obj_expr(o->target);
3264 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003265 if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003266 goto failed;
3267 Py_DECREF(value);
3268 value = ast2obj_expr(o->iter);
3269 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003270 if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003271 goto failed;
3272 Py_DECREF(value);
3273 value = ast2obj_list(o->ifs, ast2obj_expr);
3274 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003275 if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003276 goto failed;
3277 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003278 return result;
3279failed:
3280 Py_XDECREF(value);
3281 Py_XDECREF(result);
3282 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003283}
3284
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003285PyObject*
3286ast2obj_excepthandler(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003287{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003288 excepthandler_ty o = (excepthandler_ty)_o;
3289 PyObject *result = NULL, *value = NULL;
3290 if (!o) {
3291 Py_INCREF(Py_None);
3292 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003293 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003294
Neal Norwitzad74aa82008-03-31 05:14:30 +00003295 switch (o->kind) {
3296 case ExceptHandler_kind:
3297 result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
3298 if (!result) goto failed;
3299 value = ast2obj_expr(o->v.ExceptHandler.type);
3300 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003301 if (_PyObject_SetAttrId(result, &PyId_type, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003302 goto failed;
3303 Py_DECREF(value);
3304 value = ast2obj_identifier(o->v.ExceptHandler.name);
3305 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003306 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003307 goto failed;
3308 Py_DECREF(value);
3309 value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
3310 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003311 if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
Neal Norwitzad74aa82008-03-31 05:14:30 +00003312 goto failed;
3313 Py_DECREF(value);
3314 break;
3315 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003316 value = ast2obj_int(o->lineno);
3317 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003318 if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003319 goto failed;
3320 Py_DECREF(value);
3321 value = ast2obj_int(o->col_offset);
3322 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003323 if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003324 goto failed;
3325 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003326 return result;
3327failed:
3328 Py_XDECREF(value);
3329 Py_XDECREF(result);
3330 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003331}
3332
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003333PyObject*
3334ast2obj_arguments(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003335{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003336 arguments_ty o = (arguments_ty)_o;
3337 PyObject *result = NULL, *value = NULL;
3338 if (!o) {
3339 Py_INCREF(Py_None);
3340 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003341 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003342
3343 result = PyType_GenericNew(arguments_type, NULL, NULL);
3344 if (!result) return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00003345 value = ast2obj_list(o->args, ast2obj_arg);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003346 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003347 if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003348 goto failed;
3349 Py_DECREF(value);
3350 value = ast2obj_identifier(o->vararg);
3351 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003352 if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003353 goto failed;
3354 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003355 value = ast2obj_expr(o->varargannotation);
3356 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003357 if (_PyObject_SetAttrId(result, &PyId_varargannotation, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00003358 goto failed;
3359 Py_DECREF(value);
3360 value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003361 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003362 if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1)
Guido van Rossum4f72a782006-10-27 23:31:49 +00003363 goto failed;
3364 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003365 value = ast2obj_identifier(o->kwarg);
3366 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003367 if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003368 goto failed;
3369 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003370 value = ast2obj_expr(o->kwargannotation);
3371 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003372 if (_PyObject_SetAttrId(result, &PyId_kwargannotation, value) == -1)
Neal Norwitzc1505362006-12-28 06:47:50 +00003373 goto failed;
3374 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003375 value = ast2obj_list(o->defaults, ast2obj_expr);
3376 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003377 if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003378 goto failed;
3379 Py_DECREF(value);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003380 value = ast2obj_list(o->kw_defaults, ast2obj_expr);
3381 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003382 if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1)
Guido van Rossum4f72a782006-10-27 23:31:49 +00003383 goto failed;
3384 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003385 return result;
3386failed:
3387 Py_XDECREF(value);
3388 Py_XDECREF(result);
3389 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003390}
3391
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003392PyObject*
Neal Norwitzc1505362006-12-28 06:47:50 +00003393ast2obj_arg(void* _o)
3394{
3395 arg_ty o = (arg_ty)_o;
3396 PyObject *result = NULL, *value = NULL;
3397 if (!o) {
3398 Py_INCREF(Py_None);
3399 return Py_None;
3400 }
3401
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003402 result = PyType_GenericNew(arg_type, NULL, NULL);
3403 if (!result) return NULL;
3404 value = ast2obj_identifier(o->arg);
3405 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003406 if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003407 goto failed;
3408 Py_DECREF(value);
3409 value = ast2obj_expr(o->annotation);
3410 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003411 if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
Guido van Rossum1bc535d2007-05-15 18:46:22 +00003412 goto failed;
3413 Py_DECREF(value);
Neal Norwitzc1505362006-12-28 06:47:50 +00003414 return result;
3415failed:
3416 Py_XDECREF(value);
3417 Py_XDECREF(result);
3418 return NULL;
3419}
3420
3421PyObject*
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003422ast2obj_keyword(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003423{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003424 keyword_ty o = (keyword_ty)_o;
3425 PyObject *result = NULL, *value = NULL;
3426 if (!o) {
3427 Py_INCREF(Py_None);
3428 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003429 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003430
3431 result = PyType_GenericNew(keyword_type, NULL, NULL);
3432 if (!result) return NULL;
3433 value = ast2obj_identifier(o->arg);
3434 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003435 if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003436 goto failed;
3437 Py_DECREF(value);
3438 value = ast2obj_expr(o->value);
3439 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003440 if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003441 goto failed;
3442 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003443 return result;
3444failed:
3445 Py_XDECREF(value);
3446 Py_XDECREF(result);
3447 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003448}
3449
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003450PyObject*
3451ast2obj_alias(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003452{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003453 alias_ty o = (alias_ty)_o;
3454 PyObject *result = NULL, *value = NULL;
3455 if (!o) {
3456 Py_INCREF(Py_None);
3457 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003458 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003459
3460 result = PyType_GenericNew(alias_type, NULL, NULL);
3461 if (!result) return NULL;
3462 value = ast2obj_identifier(o->name);
3463 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003464 if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003465 goto failed;
3466 Py_DECREF(value);
3467 value = ast2obj_identifier(o->asname);
3468 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003469 if (_PyObject_SetAttrId(result, &PyId_asname, value) == -1)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003470 goto failed;
3471 Py_DECREF(value);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003472 return result;
3473failed:
3474 Py_XDECREF(value);
3475 Py_XDECREF(result);
3476 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003477}
3478
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003479PyObject*
3480ast2obj_withitem(void* _o)
3481{
3482 withitem_ty o = (withitem_ty)_o;
3483 PyObject *result = NULL, *value = NULL;
3484 if (!o) {
3485 Py_INCREF(Py_None);
3486 return Py_None;
3487 }
3488
3489 result = PyType_GenericNew(withitem_type, NULL, NULL);
3490 if (!result) return NULL;
3491 value = ast2obj_expr(o->context_expr);
3492 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003493 if (_PyObject_SetAttrId(result, &PyId_context_expr, value) == -1)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003494 goto failed;
3495 Py_DECREF(value);
3496 value = ast2obj_expr(o->optional_vars);
3497 if (!value) goto failed;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02003498 if (_PyObject_SetAttrId(result, &PyId_optional_vars, value) == -1)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003499 goto failed;
3500 Py_DECREF(value);
3501 return result;
3502failed:
3503 Py_XDECREF(value);
3504 Py_XDECREF(result);
3505 return NULL;
3506}
3507
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003508
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003509int
3510obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
3511{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003512 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003513
Benjamin Petersond8f65972010-11-20 04:31:07 +00003514 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003515
3516 if (obj == Py_None) {
3517 *out = NULL;
3518 return 0;
3519 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003520 isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
3521 if (isinstance == -1) {
3522 return 1;
3523 }
3524 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003525 asdl_seq* body;
3526
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003527 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003528 int res;
3529 Py_ssize_t len;
3530 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003531 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003532 if (tmp == NULL) goto failed;
3533 if (!PyList_Check(tmp)) {
3534 PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3535 goto failed;
3536 }
3537 len = PyList_GET_SIZE(tmp);
3538 body = asdl_seq_new(len, arena);
3539 if (body == NULL) goto failed;
3540 for (i = 0; i < len; i++) {
3541 stmt_ty value;
3542 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3543 if (res != 0) goto failed;
3544 asdl_seq_SET(body, i, value);
3545 }
3546 Py_XDECREF(tmp);
3547 tmp = NULL;
3548 } else {
3549 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
3550 return 1;
3551 }
3552 *out = Module(body, arena);
3553 if (*out == NULL) goto failed;
3554 return 0;
3555 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003556 isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
3557 if (isinstance == -1) {
3558 return 1;
3559 }
3560 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003561 asdl_seq* body;
3562
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003563 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003564 int res;
3565 Py_ssize_t len;
3566 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003567 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003568 if (tmp == NULL) goto failed;
3569 if (!PyList_Check(tmp)) {
3570 PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3571 goto failed;
3572 }
3573 len = PyList_GET_SIZE(tmp);
3574 body = asdl_seq_new(len, arena);
3575 if (body == NULL) goto failed;
3576 for (i = 0; i < len; i++) {
3577 stmt_ty value;
3578 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3579 if (res != 0) goto failed;
3580 asdl_seq_SET(body, i, value);
3581 }
3582 Py_XDECREF(tmp);
3583 tmp = NULL;
3584 } else {
3585 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
3586 return 1;
3587 }
3588 *out = Interactive(body, arena);
3589 if (*out == NULL) goto failed;
3590 return 0;
3591 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003592 isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
3593 if (isinstance == -1) {
3594 return 1;
3595 }
3596 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003597 expr_ty body;
3598
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003599 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003600 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003601 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003602 if (tmp == NULL) goto failed;
3603 res = obj2ast_expr(tmp, &body, arena);
3604 if (res != 0) goto failed;
3605 Py_XDECREF(tmp);
3606 tmp = NULL;
3607 } else {
3608 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
3609 return 1;
3610 }
3611 *out = Expression(body, arena);
3612 if (*out == NULL) goto failed;
3613 return 0;
3614 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003615 isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
3616 if (isinstance == -1) {
3617 return 1;
3618 }
3619 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003620 asdl_seq* body;
3621
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003622 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003623 int res;
3624 Py_ssize_t len;
3625 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003626 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003627 if (tmp == NULL) goto failed;
3628 if (!PyList_Check(tmp)) {
3629 PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3630 goto failed;
3631 }
3632 len = PyList_GET_SIZE(tmp);
3633 body = asdl_seq_new(len, arena);
3634 if (body == NULL) goto failed;
3635 for (i = 0; i < len; i++) {
3636 stmt_ty value;
3637 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3638 if (res != 0) goto failed;
3639 asdl_seq_SET(body, i, value);
3640 }
3641 Py_XDECREF(tmp);
3642 tmp = NULL;
3643 } else {
3644 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
3645 return 1;
3646 }
3647 *out = Suite(body, arena);
3648 if (*out == NULL) goto failed;
3649 return 0;
3650 }
3651
Benjamin Peterson5b066812010-11-20 01:38:49 +00003652 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
3653 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00003654 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003655 return 1;
3656}
3657
3658int
3659obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
3660{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003661 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003662
Benjamin Petersond8f65972010-11-20 04:31:07 +00003663 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003664 int lineno;
3665 int col_offset;
3666
3667 if (obj == Py_None) {
3668 *out = NULL;
3669 return 0;
3670 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003671 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003672 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003673 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003674 if (tmp == NULL) goto failed;
3675 res = obj2ast_int(tmp, &lineno, arena);
3676 if (res != 0) goto failed;
3677 Py_XDECREF(tmp);
3678 tmp = NULL;
3679 } else {
3680 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
3681 return 1;
3682 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003683 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003684 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003685 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003686 if (tmp == NULL) goto failed;
3687 res = obj2ast_int(tmp, &col_offset, arena);
3688 if (res != 0) goto failed;
3689 Py_XDECREF(tmp);
3690 tmp = NULL;
3691 } else {
3692 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
3693 return 1;
3694 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003695 isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
3696 if (isinstance == -1) {
3697 return 1;
3698 }
3699 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003700 identifier name;
3701 arguments_ty args;
3702 asdl_seq* body;
3703 asdl_seq* decorator_list;
3704 expr_ty returns;
3705
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003706 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003707 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003708 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003709 if (tmp == NULL) goto failed;
3710 res = obj2ast_identifier(tmp, &name, arena);
3711 if (res != 0) goto failed;
3712 Py_XDECREF(tmp);
3713 tmp = NULL;
3714 } else {
3715 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
3716 return 1;
3717 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003718 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003719 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003720 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003721 if (tmp == NULL) goto failed;
3722 res = obj2ast_arguments(tmp, &args, arena);
3723 if (res != 0) goto failed;
3724 Py_XDECREF(tmp);
3725 tmp = NULL;
3726 } else {
3727 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
3728 return 1;
3729 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003730 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003731 int res;
3732 Py_ssize_t len;
3733 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003734 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003735 if (tmp == NULL) goto failed;
3736 if (!PyList_Check(tmp)) {
3737 PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3738 goto failed;
3739 }
3740 len = PyList_GET_SIZE(tmp);
3741 body = asdl_seq_new(len, arena);
3742 if (body == NULL) goto failed;
3743 for (i = 0; i < len; i++) {
3744 stmt_ty value;
3745 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3746 if (res != 0) goto failed;
3747 asdl_seq_SET(body, i, value);
3748 }
3749 Py_XDECREF(tmp);
3750 tmp = NULL;
3751 } else {
3752 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
3753 return 1;
3754 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003755 if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003756 int res;
3757 Py_ssize_t len;
3758 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003759 tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003760 if (tmp == NULL) goto failed;
3761 if (!PyList_Check(tmp)) {
3762 PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3763 goto failed;
3764 }
3765 len = PyList_GET_SIZE(tmp);
3766 decorator_list = asdl_seq_new(len, arena);
3767 if (decorator_list == NULL) goto failed;
3768 for (i = 0; i < len; i++) {
3769 expr_ty value;
3770 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3771 if (res != 0) goto failed;
3772 asdl_seq_SET(decorator_list, i, value);
3773 }
3774 Py_XDECREF(tmp);
3775 tmp = NULL;
3776 } else {
3777 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
3778 return 1;
3779 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003780 if (_PyObject_HasAttrId(obj, &PyId_returns)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003781 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003782 tmp = _PyObject_GetAttrId(obj, &PyId_returns);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003783 if (tmp == NULL) goto failed;
3784 res = obj2ast_expr(tmp, &returns, arena);
3785 if (res != 0) goto failed;
3786 Py_XDECREF(tmp);
3787 tmp = NULL;
3788 } else {
3789 returns = NULL;
3790 }
3791 *out = FunctionDef(name, args, body, decorator_list, returns,
3792 lineno, col_offset, arena);
3793 if (*out == NULL) goto failed;
3794 return 0;
3795 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003796 isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
3797 if (isinstance == -1) {
3798 return 1;
3799 }
3800 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003801 identifier name;
3802 asdl_seq* bases;
3803 asdl_seq* keywords;
3804 expr_ty starargs;
3805 expr_ty kwargs;
3806 asdl_seq* body;
3807 asdl_seq* decorator_list;
3808
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003809 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003810 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003811 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003812 if (tmp == NULL) goto failed;
3813 res = obj2ast_identifier(tmp, &name, arena);
3814 if (res != 0) goto failed;
3815 Py_XDECREF(tmp);
3816 tmp = NULL;
3817 } else {
3818 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
3819 return 1;
3820 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003821 if (_PyObject_HasAttrId(obj, &PyId_bases)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003822 int res;
3823 Py_ssize_t len;
3824 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003825 tmp = _PyObject_GetAttrId(obj, &PyId_bases);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003826 if (tmp == NULL) goto failed;
3827 if (!PyList_Check(tmp)) {
3828 PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3829 goto failed;
3830 }
3831 len = PyList_GET_SIZE(tmp);
3832 bases = asdl_seq_new(len, arena);
3833 if (bases == NULL) goto failed;
3834 for (i = 0; i < len; i++) {
3835 expr_ty value;
3836 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3837 if (res != 0) goto failed;
3838 asdl_seq_SET(bases, i, value);
3839 }
3840 Py_XDECREF(tmp);
3841 tmp = NULL;
3842 } else {
3843 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
3844 return 1;
3845 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003846 if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003847 int res;
3848 Py_ssize_t len;
3849 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003850 tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003851 if (tmp == NULL) goto failed;
3852 if (!PyList_Check(tmp)) {
3853 PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3854 goto failed;
3855 }
3856 len = PyList_GET_SIZE(tmp);
3857 keywords = asdl_seq_new(len, arena);
3858 if (keywords == NULL) goto failed;
3859 for (i = 0; i < len; i++) {
3860 keyword_ty value;
3861 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
3862 if (res != 0) goto failed;
3863 asdl_seq_SET(keywords, i, value);
3864 }
3865 Py_XDECREF(tmp);
3866 tmp = NULL;
3867 } else {
3868 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
3869 return 1;
3870 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003871 if (_PyObject_HasAttrId(obj, &PyId_starargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003872 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003873 tmp = _PyObject_GetAttrId(obj, &PyId_starargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003874 if (tmp == NULL) goto failed;
3875 res = obj2ast_expr(tmp, &starargs, arena);
3876 if (res != 0) goto failed;
3877 Py_XDECREF(tmp);
3878 tmp = NULL;
3879 } else {
3880 starargs = NULL;
3881 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003882 if (_PyObject_HasAttrId(obj, &PyId_kwargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003883 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003884 tmp = _PyObject_GetAttrId(obj, &PyId_kwargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003885 if (tmp == NULL) goto failed;
3886 res = obj2ast_expr(tmp, &kwargs, arena);
3887 if (res != 0) goto failed;
3888 Py_XDECREF(tmp);
3889 tmp = NULL;
3890 } else {
3891 kwargs = NULL;
3892 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003893 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003894 int res;
3895 Py_ssize_t len;
3896 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003897 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003898 if (tmp == NULL) goto failed;
3899 if (!PyList_Check(tmp)) {
3900 PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3901 goto failed;
3902 }
3903 len = PyList_GET_SIZE(tmp);
3904 body = asdl_seq_new(len, arena);
3905 if (body == NULL) goto failed;
3906 for (i = 0; i < len; i++) {
3907 stmt_ty value;
3908 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3909 if (res != 0) goto failed;
3910 asdl_seq_SET(body, i, value);
3911 }
3912 Py_XDECREF(tmp);
3913 tmp = NULL;
3914 } else {
3915 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
3916 return 1;
3917 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003918 if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003919 int res;
3920 Py_ssize_t len;
3921 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003922 tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003923 if (tmp == NULL) goto failed;
3924 if (!PyList_Check(tmp)) {
3925 PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3926 goto failed;
3927 }
3928 len = PyList_GET_SIZE(tmp);
3929 decorator_list = asdl_seq_new(len, arena);
3930 if (decorator_list == NULL) goto failed;
3931 for (i = 0; i < len; i++) {
3932 expr_ty value;
3933 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3934 if (res != 0) goto failed;
3935 asdl_seq_SET(decorator_list, i, value);
3936 }
3937 Py_XDECREF(tmp);
3938 tmp = NULL;
3939 } else {
3940 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
3941 return 1;
3942 }
3943 *out = ClassDef(name, bases, keywords, starargs, kwargs, body,
3944 decorator_list, lineno, col_offset, arena);
3945 if (*out == NULL) goto failed;
3946 return 0;
3947 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003948 isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
3949 if (isinstance == -1) {
3950 return 1;
3951 }
3952 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003953 expr_ty value;
3954
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003955 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003956 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003957 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003958 if (tmp == NULL) goto failed;
3959 res = obj2ast_expr(tmp, &value, arena);
3960 if (res != 0) goto failed;
3961 Py_XDECREF(tmp);
3962 tmp = NULL;
3963 } else {
3964 value = NULL;
3965 }
3966 *out = Return(value, lineno, col_offset, arena);
3967 if (*out == NULL) goto failed;
3968 return 0;
3969 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00003970 isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
3971 if (isinstance == -1) {
3972 return 1;
3973 }
3974 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003975 asdl_seq* targets;
3976
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003977 if (_PyObject_HasAttrId(obj, &PyId_targets)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003978 int res;
3979 Py_ssize_t len;
3980 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003981 tmp = _PyObject_GetAttrId(obj, &PyId_targets);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00003982 if (tmp == NULL) goto failed;
3983 if (!PyList_Check(tmp)) {
3984 PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3985 goto failed;
3986 }
3987 len = PyList_GET_SIZE(tmp);
3988 targets = asdl_seq_new(len, arena);
3989 if (targets == NULL) goto failed;
3990 for (i = 0; i < len; i++) {
3991 expr_ty value;
3992 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3993 if (res != 0) goto failed;
3994 asdl_seq_SET(targets, i, value);
3995 }
3996 Py_XDECREF(tmp);
3997 tmp = NULL;
3998 } else {
3999 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
4000 return 1;
4001 }
4002 *out = Delete(targets, lineno, col_offset, arena);
4003 if (*out == NULL) goto failed;
4004 return 0;
4005 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004006 isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
4007 if (isinstance == -1) {
4008 return 1;
4009 }
4010 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004011 asdl_seq* targets;
4012 expr_ty value;
4013
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004014 if (_PyObject_HasAttrId(obj, &PyId_targets)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004015 int res;
4016 Py_ssize_t len;
4017 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004018 tmp = _PyObject_GetAttrId(obj, &PyId_targets);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004019 if (tmp == NULL) goto failed;
4020 if (!PyList_Check(tmp)) {
4021 PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4022 goto failed;
4023 }
4024 len = PyList_GET_SIZE(tmp);
4025 targets = asdl_seq_new(len, arena);
4026 if (targets == NULL) goto failed;
4027 for (i = 0; i < len; i++) {
4028 expr_ty value;
4029 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4030 if (res != 0) goto failed;
4031 asdl_seq_SET(targets, i, value);
4032 }
4033 Py_XDECREF(tmp);
4034 tmp = NULL;
4035 } else {
4036 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
4037 return 1;
4038 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004039 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004040 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004041 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004042 if (tmp == NULL) goto failed;
4043 res = obj2ast_expr(tmp, &value, arena);
4044 if (res != 0) goto failed;
4045 Py_XDECREF(tmp);
4046 tmp = NULL;
4047 } else {
4048 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
4049 return 1;
4050 }
4051 *out = Assign(targets, value, lineno, col_offset, arena);
4052 if (*out == NULL) goto failed;
4053 return 0;
4054 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004055 isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
4056 if (isinstance == -1) {
4057 return 1;
4058 }
4059 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004060 expr_ty target;
4061 operator_ty op;
4062 expr_ty value;
4063
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004064 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004065 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004066 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004067 if (tmp == NULL) goto failed;
4068 res = obj2ast_expr(tmp, &target, arena);
4069 if (res != 0) goto failed;
4070 Py_XDECREF(tmp);
4071 tmp = NULL;
4072 } else {
4073 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
4074 return 1;
4075 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004076 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004077 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004078 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004079 if (tmp == NULL) goto failed;
4080 res = obj2ast_operator(tmp, &op, arena);
4081 if (res != 0) goto failed;
4082 Py_XDECREF(tmp);
4083 tmp = NULL;
4084 } else {
4085 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
4086 return 1;
4087 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004088 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004089 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004090 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004091 if (tmp == NULL) goto failed;
4092 res = obj2ast_expr(tmp, &value, arena);
4093 if (res != 0) goto failed;
4094 Py_XDECREF(tmp);
4095 tmp = NULL;
4096 } else {
4097 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
4098 return 1;
4099 }
4100 *out = AugAssign(target, op, value, lineno, col_offset, arena);
4101 if (*out == NULL) goto failed;
4102 return 0;
4103 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004104 isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
4105 if (isinstance == -1) {
4106 return 1;
4107 }
4108 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004109 expr_ty target;
4110 expr_ty iter;
4111 asdl_seq* body;
4112 asdl_seq* orelse;
4113
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004114 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004115 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004116 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004117 if (tmp == NULL) goto failed;
4118 res = obj2ast_expr(tmp, &target, arena);
4119 if (res != 0) goto failed;
4120 Py_XDECREF(tmp);
4121 tmp = NULL;
4122 } else {
4123 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
4124 return 1;
4125 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004126 if (_PyObject_HasAttrId(obj, &PyId_iter)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004127 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004128 tmp = _PyObject_GetAttrId(obj, &PyId_iter);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004129 if (tmp == NULL) goto failed;
4130 res = obj2ast_expr(tmp, &iter, arena);
4131 if (res != 0) goto failed;
4132 Py_XDECREF(tmp);
4133 tmp = NULL;
4134 } else {
4135 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
4136 return 1;
4137 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004138 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004139 int res;
4140 Py_ssize_t len;
4141 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004142 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004143 if (tmp == NULL) goto failed;
4144 if (!PyList_Check(tmp)) {
4145 PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4146 goto failed;
4147 }
4148 len = PyList_GET_SIZE(tmp);
4149 body = asdl_seq_new(len, arena);
4150 if (body == NULL) goto failed;
4151 for (i = 0; i < len; i++) {
4152 stmt_ty value;
4153 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4154 if (res != 0) goto failed;
4155 asdl_seq_SET(body, i, value);
4156 }
4157 Py_XDECREF(tmp);
4158 tmp = NULL;
4159 } else {
4160 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
4161 return 1;
4162 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004163 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004164 int res;
4165 Py_ssize_t len;
4166 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004167 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004168 if (tmp == NULL) goto failed;
4169 if (!PyList_Check(tmp)) {
4170 PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4171 goto failed;
4172 }
4173 len = PyList_GET_SIZE(tmp);
4174 orelse = asdl_seq_new(len, arena);
4175 if (orelse == NULL) goto failed;
4176 for (i = 0; i < len; i++) {
4177 stmt_ty value;
4178 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4179 if (res != 0) goto failed;
4180 asdl_seq_SET(orelse, i, value);
4181 }
4182 Py_XDECREF(tmp);
4183 tmp = NULL;
4184 } else {
4185 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
4186 return 1;
4187 }
4188 *out = For(target, iter, body, orelse, lineno, col_offset,
4189 arena);
4190 if (*out == NULL) goto failed;
4191 return 0;
4192 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004193 isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
4194 if (isinstance == -1) {
4195 return 1;
4196 }
4197 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004198 expr_ty test;
4199 asdl_seq* body;
4200 asdl_seq* orelse;
4201
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004202 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004203 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004204 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004205 if (tmp == NULL) goto failed;
4206 res = obj2ast_expr(tmp, &test, arena);
4207 if (res != 0) goto failed;
4208 Py_XDECREF(tmp);
4209 tmp = NULL;
4210 } else {
4211 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
4212 return 1;
4213 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004214 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004215 int res;
4216 Py_ssize_t len;
4217 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004218 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004219 if (tmp == NULL) goto failed;
4220 if (!PyList_Check(tmp)) {
4221 PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4222 goto failed;
4223 }
4224 len = PyList_GET_SIZE(tmp);
4225 body = asdl_seq_new(len, arena);
4226 if (body == NULL) goto failed;
4227 for (i = 0; i < len; i++) {
4228 stmt_ty value;
4229 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4230 if (res != 0) goto failed;
4231 asdl_seq_SET(body, i, value);
4232 }
4233 Py_XDECREF(tmp);
4234 tmp = NULL;
4235 } else {
4236 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
4237 return 1;
4238 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004239 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004240 int res;
4241 Py_ssize_t len;
4242 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004243 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004244 if (tmp == NULL) goto failed;
4245 if (!PyList_Check(tmp)) {
4246 PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4247 goto failed;
4248 }
4249 len = PyList_GET_SIZE(tmp);
4250 orelse = asdl_seq_new(len, arena);
4251 if (orelse == NULL) goto failed;
4252 for (i = 0; i < len; i++) {
4253 stmt_ty value;
4254 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4255 if (res != 0) goto failed;
4256 asdl_seq_SET(orelse, i, value);
4257 }
4258 Py_XDECREF(tmp);
4259 tmp = NULL;
4260 } else {
4261 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
4262 return 1;
4263 }
4264 *out = While(test, body, orelse, lineno, col_offset, arena);
4265 if (*out == NULL) goto failed;
4266 return 0;
4267 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004268 isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
4269 if (isinstance == -1) {
4270 return 1;
4271 }
4272 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004273 expr_ty test;
4274 asdl_seq* body;
4275 asdl_seq* orelse;
4276
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004277 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004278 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004279 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004280 if (tmp == NULL) goto failed;
4281 res = obj2ast_expr(tmp, &test, arena);
4282 if (res != 0) goto failed;
4283 Py_XDECREF(tmp);
4284 tmp = NULL;
4285 } else {
4286 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
4287 return 1;
4288 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004289 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004290 int res;
4291 Py_ssize_t len;
4292 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004293 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004294 if (tmp == NULL) goto failed;
4295 if (!PyList_Check(tmp)) {
4296 PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4297 goto failed;
4298 }
4299 len = PyList_GET_SIZE(tmp);
4300 body = asdl_seq_new(len, arena);
4301 if (body == NULL) goto failed;
4302 for (i = 0; i < len; i++) {
4303 stmt_ty value;
4304 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4305 if (res != 0) goto failed;
4306 asdl_seq_SET(body, i, value);
4307 }
4308 Py_XDECREF(tmp);
4309 tmp = NULL;
4310 } else {
4311 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
4312 return 1;
4313 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004314 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004315 int res;
4316 Py_ssize_t len;
4317 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004318 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004319 if (tmp == NULL) goto failed;
4320 if (!PyList_Check(tmp)) {
4321 PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4322 goto failed;
4323 }
4324 len = PyList_GET_SIZE(tmp);
4325 orelse = asdl_seq_new(len, arena);
4326 if (orelse == NULL) goto failed;
4327 for (i = 0; i < len; i++) {
4328 stmt_ty value;
4329 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4330 if (res != 0) goto failed;
4331 asdl_seq_SET(orelse, i, value);
4332 }
4333 Py_XDECREF(tmp);
4334 tmp = NULL;
4335 } else {
4336 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
4337 return 1;
4338 }
4339 *out = If(test, body, orelse, lineno, col_offset, arena);
4340 if (*out == NULL) goto failed;
4341 return 0;
4342 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004343 isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
4344 if (isinstance == -1) {
4345 return 1;
4346 }
4347 if (isinstance) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004348 asdl_seq* items;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004349 asdl_seq* body;
4350
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004351 if (_PyObject_HasAttrId(obj, &PyId_items)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004352 int res;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004353 Py_ssize_t len;
4354 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004355 tmp = _PyObject_GetAttrId(obj, &PyId_items);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004356 if (tmp == NULL) goto failed;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004357 if (!PyList_Check(tmp)) {
4358 PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4359 goto failed;
4360 }
4361 len = PyList_GET_SIZE(tmp);
4362 items = asdl_seq_new(len, arena);
4363 if (items == NULL) goto failed;
4364 for (i = 0; i < len; i++) {
4365 withitem_ty value;
4366 res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena);
4367 if (res != 0) goto failed;
4368 asdl_seq_SET(items, i, value);
4369 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004370 Py_XDECREF(tmp);
4371 tmp = NULL;
4372 } else {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004373 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004374 return 1;
4375 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004376 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004377 int res;
4378 Py_ssize_t len;
4379 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004380 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004381 if (tmp == NULL) goto failed;
4382 if (!PyList_Check(tmp)) {
4383 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4384 goto failed;
4385 }
4386 len = PyList_GET_SIZE(tmp);
4387 body = asdl_seq_new(len, arena);
4388 if (body == NULL) goto failed;
4389 for (i = 0; i < len; i++) {
4390 stmt_ty value;
4391 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4392 if (res != 0) goto failed;
4393 asdl_seq_SET(body, i, value);
4394 }
4395 Py_XDECREF(tmp);
4396 tmp = NULL;
4397 } else {
4398 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
4399 return 1;
4400 }
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004401 *out = With(items, body, lineno, col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004402 if (*out == NULL) goto failed;
4403 return 0;
4404 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004405 isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
4406 if (isinstance == -1) {
4407 return 1;
4408 }
4409 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004410 expr_ty exc;
4411 expr_ty cause;
4412
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004413 if (_PyObject_HasAttrId(obj, &PyId_exc)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004414 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004415 tmp = _PyObject_GetAttrId(obj, &PyId_exc);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004416 if (tmp == NULL) goto failed;
4417 res = obj2ast_expr(tmp, &exc, arena);
4418 if (res != 0) goto failed;
4419 Py_XDECREF(tmp);
4420 tmp = NULL;
4421 } else {
4422 exc = NULL;
4423 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004424 if (_PyObject_HasAttrId(obj, &PyId_cause)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004425 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004426 tmp = _PyObject_GetAttrId(obj, &PyId_cause);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004427 if (tmp == NULL) goto failed;
4428 res = obj2ast_expr(tmp, &cause, arena);
4429 if (res != 0) goto failed;
4430 Py_XDECREF(tmp);
4431 tmp = NULL;
4432 } else {
4433 cause = NULL;
4434 }
4435 *out = Raise(exc, cause, lineno, col_offset, arena);
4436 if (*out == NULL) goto failed;
4437 return 0;
4438 }
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004439 isinstance = PyObject_IsInstance(obj, (PyObject*)Try_type);
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004440 if (isinstance == -1) {
4441 return 1;
4442 }
4443 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004444 asdl_seq* body;
4445 asdl_seq* handlers;
4446 asdl_seq* orelse;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004447 asdl_seq* finalbody;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004448
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004449 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004450 int res;
4451 Py_ssize_t len;
4452 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004453 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004454 if (tmp == NULL) goto failed;
4455 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004456 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 +00004457 goto failed;
4458 }
4459 len = PyList_GET_SIZE(tmp);
4460 body = asdl_seq_new(len, arena);
4461 if (body == NULL) goto failed;
4462 for (i = 0; i < len; i++) {
4463 stmt_ty value;
4464 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4465 if (res != 0) goto failed;
4466 asdl_seq_SET(body, i, value);
4467 }
4468 Py_XDECREF(tmp);
4469 tmp = NULL;
4470 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004471 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004472 return 1;
4473 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004474 if (_PyObject_HasAttrId(obj, &PyId_handlers)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004475 int res;
4476 Py_ssize_t len;
4477 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004478 tmp = _PyObject_GetAttrId(obj, &PyId_handlers);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004479 if (tmp == NULL) goto failed;
4480 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004481 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 +00004482 goto failed;
4483 }
4484 len = PyList_GET_SIZE(tmp);
4485 handlers = asdl_seq_new(len, arena);
4486 if (handlers == NULL) goto failed;
4487 for (i = 0; i < len; i++) {
4488 excepthandler_ty value;
4489 res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
4490 if (res != 0) goto failed;
4491 asdl_seq_SET(handlers, i, value);
4492 }
4493 Py_XDECREF(tmp);
4494 tmp = NULL;
4495 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004496 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004497 return 1;
4498 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004499 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004500 int res;
4501 Py_ssize_t len;
4502 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004503 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004504 if (tmp == NULL) goto failed;
4505 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004506 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 +00004507 goto failed;
4508 }
4509 len = PyList_GET_SIZE(tmp);
4510 orelse = asdl_seq_new(len, arena);
4511 if (orelse == NULL) goto failed;
4512 for (i = 0; i < len; i++) {
4513 stmt_ty value;
4514 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4515 if (res != 0) goto failed;
4516 asdl_seq_SET(orelse, i, value);
4517 }
4518 Py_XDECREF(tmp);
4519 tmp = NULL;
4520 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004521 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004522 return 1;
4523 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004524 if (_PyObject_HasAttrId(obj, &PyId_finalbody)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004525 int res;
4526 Py_ssize_t len;
4527 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004528 tmp = _PyObject_GetAttrId(obj, &PyId_finalbody);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004529 if (tmp == NULL) goto failed;
4530 if (!PyList_Check(tmp)) {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004531 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 +00004532 goto failed;
4533 }
4534 len = PyList_GET_SIZE(tmp);
4535 finalbody = asdl_seq_new(len, arena);
4536 if (finalbody == NULL) goto failed;
4537 for (i = 0; i < len; i++) {
4538 stmt_ty value;
4539 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4540 if (res != 0) goto failed;
4541 asdl_seq_SET(finalbody, i, value);
4542 }
4543 Py_XDECREF(tmp);
4544 tmp = NULL;
4545 } else {
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004546 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004547 return 1;
4548 }
Benjamin Peterson43af12b2011-05-29 11:43:10 -05004549 *out = Try(body, handlers, orelse, finalbody, lineno,
4550 col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004551 if (*out == NULL) goto failed;
4552 return 0;
4553 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004554 isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
4555 if (isinstance == -1) {
4556 return 1;
4557 }
4558 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004559 expr_ty test;
4560 expr_ty msg;
4561
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004562 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004563 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004564 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004565 if (tmp == NULL) goto failed;
4566 res = obj2ast_expr(tmp, &test, arena);
4567 if (res != 0) goto failed;
4568 Py_XDECREF(tmp);
4569 tmp = NULL;
4570 } else {
4571 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
4572 return 1;
4573 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004574 if (_PyObject_HasAttrId(obj, &PyId_msg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004575 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004576 tmp = _PyObject_GetAttrId(obj, &PyId_msg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004577 if (tmp == NULL) goto failed;
4578 res = obj2ast_expr(tmp, &msg, arena);
4579 if (res != 0) goto failed;
4580 Py_XDECREF(tmp);
4581 tmp = NULL;
4582 } else {
4583 msg = NULL;
4584 }
4585 *out = Assert(test, msg, lineno, col_offset, arena);
4586 if (*out == NULL) goto failed;
4587 return 0;
4588 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004589 isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
4590 if (isinstance == -1) {
4591 return 1;
4592 }
4593 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004594 asdl_seq* names;
4595
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004596 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004597 int res;
4598 Py_ssize_t len;
4599 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004600 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004601 if (tmp == NULL) goto failed;
4602 if (!PyList_Check(tmp)) {
4603 PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4604 goto failed;
4605 }
4606 len = PyList_GET_SIZE(tmp);
4607 names = asdl_seq_new(len, arena);
4608 if (names == NULL) goto failed;
4609 for (i = 0; i < len; i++) {
4610 alias_ty value;
4611 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4612 if (res != 0) goto failed;
4613 asdl_seq_SET(names, i, value);
4614 }
4615 Py_XDECREF(tmp);
4616 tmp = NULL;
4617 } else {
4618 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
4619 return 1;
4620 }
4621 *out = Import(names, lineno, col_offset, arena);
4622 if (*out == NULL) goto failed;
4623 return 0;
4624 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004625 isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
4626 if (isinstance == -1) {
4627 return 1;
4628 }
4629 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004630 identifier module;
4631 asdl_seq* names;
4632 int level;
4633
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004634 if (_PyObject_HasAttrId(obj, &PyId_module)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004635 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004636 tmp = _PyObject_GetAttrId(obj, &PyId_module);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004637 if (tmp == NULL) goto failed;
4638 res = obj2ast_identifier(tmp, &module, arena);
4639 if (res != 0) goto failed;
4640 Py_XDECREF(tmp);
4641 tmp = NULL;
4642 } else {
Benjamin Peterson78565b22009-06-28 19:19:51 +00004643 module = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004644 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004645 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004646 int res;
4647 Py_ssize_t len;
4648 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004649 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004650 if (tmp == NULL) goto failed;
4651 if (!PyList_Check(tmp)) {
4652 PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4653 goto failed;
4654 }
4655 len = PyList_GET_SIZE(tmp);
4656 names = asdl_seq_new(len, arena);
4657 if (names == NULL) goto failed;
4658 for (i = 0; i < len; i++) {
4659 alias_ty value;
4660 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4661 if (res != 0) goto failed;
4662 asdl_seq_SET(names, i, value);
4663 }
4664 Py_XDECREF(tmp);
4665 tmp = NULL;
4666 } else {
4667 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
4668 return 1;
4669 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004670 if (_PyObject_HasAttrId(obj, &PyId_level)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004671 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004672 tmp = _PyObject_GetAttrId(obj, &PyId_level);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004673 if (tmp == NULL) goto failed;
4674 res = obj2ast_int(tmp, &level, arena);
4675 if (res != 0) goto failed;
4676 Py_XDECREF(tmp);
4677 tmp = NULL;
4678 } else {
4679 level = 0;
4680 }
4681 *out = ImportFrom(module, names, level, lineno, col_offset,
4682 arena);
4683 if (*out == NULL) goto failed;
4684 return 0;
4685 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004686 isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
4687 if (isinstance == -1) {
4688 return 1;
4689 }
4690 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004691 asdl_seq* names;
4692
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004693 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004694 int res;
4695 Py_ssize_t len;
4696 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004697 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004698 if (tmp == NULL) goto failed;
4699 if (!PyList_Check(tmp)) {
4700 PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4701 goto failed;
4702 }
4703 len = PyList_GET_SIZE(tmp);
4704 names = asdl_seq_new(len, arena);
4705 if (names == NULL) goto failed;
4706 for (i = 0; i < len; i++) {
4707 identifier value;
4708 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
4709 if (res != 0) goto failed;
4710 asdl_seq_SET(names, i, value);
4711 }
4712 Py_XDECREF(tmp);
4713 tmp = NULL;
4714 } else {
4715 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
4716 return 1;
4717 }
4718 *out = Global(names, lineno, col_offset, arena);
4719 if (*out == NULL) goto failed;
4720 return 0;
4721 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004722 isinstance = PyObject_IsInstance(obj, (PyObject*)Nonlocal_type);
4723 if (isinstance == -1) {
4724 return 1;
4725 }
4726 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004727 asdl_seq* names;
4728
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004729 if (_PyObject_HasAttrId(obj, &PyId_names)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004730 int res;
4731 Py_ssize_t len;
4732 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004733 tmp = _PyObject_GetAttrId(obj, &PyId_names);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004734 if (tmp == NULL) goto failed;
4735 if (!PyList_Check(tmp)) {
4736 PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4737 goto failed;
4738 }
4739 len = PyList_GET_SIZE(tmp);
4740 names = asdl_seq_new(len, arena);
4741 if (names == NULL) goto failed;
4742 for (i = 0; i < len; i++) {
4743 identifier value;
4744 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
4745 if (res != 0) goto failed;
4746 asdl_seq_SET(names, i, value);
4747 }
4748 Py_XDECREF(tmp);
4749 tmp = NULL;
4750 } else {
4751 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
4752 return 1;
4753 }
4754 *out = Nonlocal(names, lineno, col_offset, arena);
4755 if (*out == NULL) goto failed;
4756 return 0;
4757 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004758 isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
4759 if (isinstance == -1) {
4760 return 1;
4761 }
4762 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004763 expr_ty value;
4764
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004765 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004766 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004767 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004768 if (tmp == NULL) goto failed;
4769 res = obj2ast_expr(tmp, &value, arena);
4770 if (res != 0) goto failed;
4771 Py_XDECREF(tmp);
4772 tmp = NULL;
4773 } else {
4774 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
4775 return 1;
4776 }
4777 *out = Expr(value, lineno, col_offset, arena);
4778 if (*out == NULL) goto failed;
4779 return 0;
4780 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004781 isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
4782 if (isinstance == -1) {
4783 return 1;
4784 }
4785 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004786
4787 *out = Pass(lineno, col_offset, arena);
4788 if (*out == NULL) goto failed;
4789 return 0;
4790 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004791 isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
4792 if (isinstance == -1) {
4793 return 1;
4794 }
4795 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004796
4797 *out = Break(lineno, col_offset, arena);
4798 if (*out == NULL) goto failed;
4799 return 0;
4800 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004801 isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
4802 if (isinstance == -1) {
4803 return 1;
4804 }
4805 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004806
4807 *out = Continue(lineno, col_offset, arena);
4808 if (*out == NULL) goto failed;
4809 return 0;
4810 }
4811
Benjamin Peterson5b066812010-11-20 01:38:49 +00004812 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
4813 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00004814 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004815 return 1;
4816}
4817
4818int
4819obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
4820{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004821 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004822
Benjamin Petersond8f65972010-11-20 04:31:07 +00004823 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004824 int lineno;
4825 int col_offset;
4826
4827 if (obj == Py_None) {
4828 *out = NULL;
4829 return 0;
4830 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004831 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004832 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004833 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004834 if (tmp == NULL) goto failed;
4835 res = obj2ast_int(tmp, &lineno, arena);
4836 if (res != 0) goto failed;
4837 Py_XDECREF(tmp);
4838 tmp = NULL;
4839 } else {
4840 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
4841 return 1;
4842 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004843 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004844 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004845 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004846 if (tmp == NULL) goto failed;
4847 res = obj2ast_int(tmp, &col_offset, arena);
4848 if (res != 0) goto failed;
4849 Py_XDECREF(tmp);
4850 tmp = NULL;
4851 } else {
4852 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
4853 return 1;
4854 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004855 isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
4856 if (isinstance == -1) {
4857 return 1;
4858 }
4859 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004860 boolop_ty op;
4861 asdl_seq* values;
4862
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004863 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004864 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004865 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004866 if (tmp == NULL) goto failed;
4867 res = obj2ast_boolop(tmp, &op, arena);
4868 if (res != 0) goto failed;
4869 Py_XDECREF(tmp);
4870 tmp = NULL;
4871 } else {
4872 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
4873 return 1;
4874 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004875 if (_PyObject_HasAttrId(obj, &PyId_values)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004876 int res;
4877 Py_ssize_t len;
4878 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004879 tmp = _PyObject_GetAttrId(obj, &PyId_values);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004880 if (tmp == NULL) goto failed;
4881 if (!PyList_Check(tmp)) {
4882 PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4883 goto failed;
4884 }
4885 len = PyList_GET_SIZE(tmp);
4886 values = asdl_seq_new(len, arena);
4887 if (values == NULL) goto failed;
4888 for (i = 0; i < len; i++) {
4889 expr_ty value;
4890 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4891 if (res != 0) goto failed;
4892 asdl_seq_SET(values, i, value);
4893 }
4894 Py_XDECREF(tmp);
4895 tmp = NULL;
4896 } else {
4897 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
4898 return 1;
4899 }
4900 *out = BoolOp(op, values, lineno, col_offset, arena);
4901 if (*out == NULL) goto failed;
4902 return 0;
4903 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004904 isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
4905 if (isinstance == -1) {
4906 return 1;
4907 }
4908 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004909 expr_ty left;
4910 operator_ty op;
4911 expr_ty right;
4912
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004913 if (_PyObject_HasAttrId(obj, &PyId_left)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004914 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004915 tmp = _PyObject_GetAttrId(obj, &PyId_left);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004916 if (tmp == NULL) goto failed;
4917 res = obj2ast_expr(tmp, &left, arena);
4918 if (res != 0) goto failed;
4919 Py_XDECREF(tmp);
4920 tmp = NULL;
4921 } else {
4922 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
4923 return 1;
4924 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004925 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004926 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004927 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004928 if (tmp == NULL) goto failed;
4929 res = obj2ast_operator(tmp, &op, arena);
4930 if (res != 0) goto failed;
4931 Py_XDECREF(tmp);
4932 tmp = NULL;
4933 } else {
4934 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
4935 return 1;
4936 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004937 if (_PyObject_HasAttrId(obj, &PyId_right)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004938 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004939 tmp = _PyObject_GetAttrId(obj, &PyId_right);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004940 if (tmp == NULL) goto failed;
4941 res = obj2ast_expr(tmp, &right, arena);
4942 if (res != 0) goto failed;
4943 Py_XDECREF(tmp);
4944 tmp = NULL;
4945 } else {
4946 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
4947 return 1;
4948 }
4949 *out = BinOp(left, op, right, lineno, col_offset, arena);
4950 if (*out == NULL) goto failed;
4951 return 0;
4952 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004953 isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
4954 if (isinstance == -1) {
4955 return 1;
4956 }
4957 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004958 unaryop_ty op;
4959 expr_ty operand;
4960
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004961 if (_PyObject_HasAttrId(obj, &PyId_op)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004962 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004963 tmp = _PyObject_GetAttrId(obj, &PyId_op);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004964 if (tmp == NULL) goto failed;
4965 res = obj2ast_unaryop(tmp, &op, arena);
4966 if (res != 0) goto failed;
4967 Py_XDECREF(tmp);
4968 tmp = NULL;
4969 } else {
4970 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
4971 return 1;
4972 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004973 if (_PyObject_HasAttrId(obj, &PyId_operand)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004974 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004975 tmp = _PyObject_GetAttrId(obj, &PyId_operand);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004976 if (tmp == NULL) goto failed;
4977 res = obj2ast_expr(tmp, &operand, arena);
4978 if (res != 0) goto failed;
4979 Py_XDECREF(tmp);
4980 tmp = NULL;
4981 } else {
4982 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
4983 return 1;
4984 }
4985 *out = UnaryOp(op, operand, lineno, col_offset, arena);
4986 if (*out == NULL) goto failed;
4987 return 0;
4988 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00004989 isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
4990 if (isinstance == -1) {
4991 return 1;
4992 }
4993 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004994 arguments_ty args;
4995 expr_ty body;
4996
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004997 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004998 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02004999 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005000 if (tmp == NULL) goto failed;
5001 res = obj2ast_arguments(tmp, &args, arena);
5002 if (res != 0) goto failed;
5003 Py_XDECREF(tmp);
5004 tmp = NULL;
5005 } else {
5006 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
5007 return 1;
5008 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005009 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005010 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005011 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005012 if (tmp == NULL) goto failed;
5013 res = obj2ast_expr(tmp, &body, arena);
5014 if (res != 0) goto failed;
5015 Py_XDECREF(tmp);
5016 tmp = NULL;
5017 } else {
5018 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
5019 return 1;
5020 }
5021 *out = Lambda(args, body, lineno, col_offset, arena);
5022 if (*out == NULL) goto failed;
5023 return 0;
5024 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005025 isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
5026 if (isinstance == -1) {
5027 return 1;
5028 }
5029 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005030 expr_ty test;
5031 expr_ty body;
5032 expr_ty orelse;
5033
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005034 if (_PyObject_HasAttrId(obj, &PyId_test)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005035 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005036 tmp = _PyObject_GetAttrId(obj, &PyId_test);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005037 if (tmp == NULL) goto failed;
5038 res = obj2ast_expr(tmp, &test, arena);
5039 if (res != 0) goto failed;
5040 Py_XDECREF(tmp);
5041 tmp = NULL;
5042 } else {
5043 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
5044 return 1;
5045 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005046 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005047 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005048 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005049 if (tmp == NULL) goto failed;
5050 res = obj2ast_expr(tmp, &body, arena);
5051 if (res != 0) goto failed;
5052 Py_XDECREF(tmp);
5053 tmp = NULL;
5054 } else {
5055 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
5056 return 1;
5057 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005058 if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005059 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005060 tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005061 if (tmp == NULL) goto failed;
5062 res = obj2ast_expr(tmp, &orelse, arena);
5063 if (res != 0) goto failed;
5064 Py_XDECREF(tmp);
5065 tmp = NULL;
5066 } else {
5067 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
5068 return 1;
5069 }
5070 *out = IfExp(test, body, orelse, lineno, col_offset, arena);
5071 if (*out == NULL) goto failed;
5072 return 0;
5073 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005074 isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
5075 if (isinstance == -1) {
5076 return 1;
5077 }
5078 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005079 asdl_seq* keys;
5080 asdl_seq* values;
5081
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005082 if (_PyObject_HasAttrId(obj, &PyId_keys)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005083 int res;
5084 Py_ssize_t len;
5085 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005086 tmp = _PyObject_GetAttrId(obj, &PyId_keys);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005087 if (tmp == NULL) goto failed;
5088 if (!PyList_Check(tmp)) {
5089 PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5090 goto failed;
5091 }
5092 len = PyList_GET_SIZE(tmp);
5093 keys = asdl_seq_new(len, arena);
5094 if (keys == NULL) goto failed;
5095 for (i = 0; i < len; i++) {
5096 expr_ty value;
5097 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5098 if (res != 0) goto failed;
5099 asdl_seq_SET(keys, i, value);
5100 }
5101 Py_XDECREF(tmp);
5102 tmp = NULL;
5103 } else {
5104 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
5105 return 1;
5106 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005107 if (_PyObject_HasAttrId(obj, &PyId_values)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005108 int res;
5109 Py_ssize_t len;
5110 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005111 tmp = _PyObject_GetAttrId(obj, &PyId_values);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005112 if (tmp == NULL) goto failed;
5113 if (!PyList_Check(tmp)) {
5114 PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5115 goto failed;
5116 }
5117 len = PyList_GET_SIZE(tmp);
5118 values = asdl_seq_new(len, arena);
5119 if (values == NULL) goto failed;
5120 for (i = 0; i < len; i++) {
5121 expr_ty value;
5122 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5123 if (res != 0) goto failed;
5124 asdl_seq_SET(values, i, value);
5125 }
5126 Py_XDECREF(tmp);
5127 tmp = NULL;
5128 } else {
5129 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
5130 return 1;
5131 }
5132 *out = Dict(keys, values, lineno, col_offset, arena);
5133 if (*out == NULL) goto failed;
5134 return 0;
5135 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005136 isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
5137 if (isinstance == -1) {
5138 return 1;
5139 }
5140 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005141 asdl_seq* elts;
5142
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005143 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005144 int res;
5145 Py_ssize_t len;
5146 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005147 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005148 if (tmp == NULL) goto failed;
5149 if (!PyList_Check(tmp)) {
5150 PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5151 goto failed;
5152 }
5153 len = PyList_GET_SIZE(tmp);
5154 elts = asdl_seq_new(len, arena);
5155 if (elts == NULL) goto failed;
5156 for (i = 0; i < len; i++) {
5157 expr_ty value;
5158 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5159 if (res != 0) goto failed;
5160 asdl_seq_SET(elts, i, value);
5161 }
5162 Py_XDECREF(tmp);
5163 tmp = NULL;
5164 } else {
5165 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
5166 return 1;
5167 }
5168 *out = Set(elts, lineno, col_offset, arena);
5169 if (*out == NULL) goto failed;
5170 return 0;
5171 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005172 isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
5173 if (isinstance == -1) {
5174 return 1;
5175 }
5176 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005177 expr_ty elt;
5178 asdl_seq* generators;
5179
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005180 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005181 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005182 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005183 if (tmp == NULL) goto failed;
5184 res = obj2ast_expr(tmp, &elt, arena);
5185 if (res != 0) goto failed;
5186 Py_XDECREF(tmp);
5187 tmp = NULL;
5188 } else {
5189 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
5190 return 1;
5191 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005192 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005193 int res;
5194 Py_ssize_t len;
5195 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005196 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005197 if (tmp == NULL) goto failed;
5198 if (!PyList_Check(tmp)) {
5199 PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5200 goto failed;
5201 }
5202 len = PyList_GET_SIZE(tmp);
5203 generators = asdl_seq_new(len, arena);
5204 if (generators == NULL) goto failed;
5205 for (i = 0; i < len; i++) {
5206 comprehension_ty value;
5207 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5208 if (res != 0) goto failed;
5209 asdl_seq_SET(generators, i, value);
5210 }
5211 Py_XDECREF(tmp);
5212 tmp = NULL;
5213 } else {
5214 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
5215 return 1;
5216 }
5217 *out = ListComp(elt, generators, lineno, col_offset, arena);
5218 if (*out == NULL) goto failed;
5219 return 0;
5220 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005221 isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
5222 if (isinstance == -1) {
5223 return 1;
5224 }
5225 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005226 expr_ty elt;
5227 asdl_seq* generators;
5228
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005229 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005230 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005231 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005232 if (tmp == NULL) goto failed;
5233 res = obj2ast_expr(tmp, &elt, arena);
5234 if (res != 0) goto failed;
5235 Py_XDECREF(tmp);
5236 tmp = NULL;
5237 } else {
5238 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
5239 return 1;
5240 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005241 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005242 int res;
5243 Py_ssize_t len;
5244 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005245 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005246 if (tmp == NULL) goto failed;
5247 if (!PyList_Check(tmp)) {
5248 PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5249 goto failed;
5250 }
5251 len = PyList_GET_SIZE(tmp);
5252 generators = asdl_seq_new(len, arena);
5253 if (generators == NULL) goto failed;
5254 for (i = 0; i < len; i++) {
5255 comprehension_ty value;
5256 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5257 if (res != 0) goto failed;
5258 asdl_seq_SET(generators, i, value);
5259 }
5260 Py_XDECREF(tmp);
5261 tmp = NULL;
5262 } else {
5263 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
5264 return 1;
5265 }
5266 *out = SetComp(elt, generators, lineno, col_offset, arena);
5267 if (*out == NULL) goto failed;
5268 return 0;
5269 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005270 isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
5271 if (isinstance == -1) {
5272 return 1;
5273 }
5274 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005275 expr_ty key;
5276 expr_ty value;
5277 asdl_seq* generators;
5278
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005279 if (_PyObject_HasAttrId(obj, &PyId_key)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005280 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005281 tmp = _PyObject_GetAttrId(obj, &PyId_key);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005282 if (tmp == NULL) goto failed;
5283 res = obj2ast_expr(tmp, &key, arena);
5284 if (res != 0) goto failed;
5285 Py_XDECREF(tmp);
5286 tmp = NULL;
5287 } else {
5288 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
5289 return 1;
5290 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005291 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005292 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005293 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005294 if (tmp == NULL) goto failed;
5295 res = obj2ast_expr(tmp, &value, arena);
5296 if (res != 0) goto failed;
5297 Py_XDECREF(tmp);
5298 tmp = NULL;
5299 } else {
5300 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
5301 return 1;
5302 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005303 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005304 int res;
5305 Py_ssize_t len;
5306 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005307 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005308 if (tmp == NULL) goto failed;
5309 if (!PyList_Check(tmp)) {
5310 PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5311 goto failed;
5312 }
5313 len = PyList_GET_SIZE(tmp);
5314 generators = asdl_seq_new(len, arena);
5315 if (generators == NULL) goto failed;
5316 for (i = 0; i < len; i++) {
5317 comprehension_ty value;
5318 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5319 if (res != 0) goto failed;
5320 asdl_seq_SET(generators, i, value);
5321 }
5322 Py_XDECREF(tmp);
5323 tmp = NULL;
5324 } else {
5325 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
5326 return 1;
5327 }
5328 *out = DictComp(key, value, generators, lineno, col_offset,
5329 arena);
5330 if (*out == NULL) goto failed;
5331 return 0;
5332 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005333 isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
5334 if (isinstance == -1) {
5335 return 1;
5336 }
5337 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005338 expr_ty elt;
5339 asdl_seq* generators;
5340
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005341 if (_PyObject_HasAttrId(obj, &PyId_elt)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005342 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005343 tmp = _PyObject_GetAttrId(obj, &PyId_elt);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005344 if (tmp == NULL) goto failed;
5345 res = obj2ast_expr(tmp, &elt, arena);
5346 if (res != 0) goto failed;
5347 Py_XDECREF(tmp);
5348 tmp = NULL;
5349 } else {
5350 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
5351 return 1;
5352 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005353 if (_PyObject_HasAttrId(obj, &PyId_generators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005354 int res;
5355 Py_ssize_t len;
5356 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005357 tmp = _PyObject_GetAttrId(obj, &PyId_generators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005358 if (tmp == NULL) goto failed;
5359 if (!PyList_Check(tmp)) {
5360 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5361 goto failed;
5362 }
5363 len = PyList_GET_SIZE(tmp);
5364 generators = asdl_seq_new(len, arena);
5365 if (generators == NULL) goto failed;
5366 for (i = 0; i < len; i++) {
5367 comprehension_ty value;
5368 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5369 if (res != 0) goto failed;
5370 asdl_seq_SET(generators, i, value);
5371 }
5372 Py_XDECREF(tmp);
5373 tmp = NULL;
5374 } else {
5375 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
5376 return 1;
5377 }
5378 *out = GeneratorExp(elt, generators, lineno, col_offset, arena);
5379 if (*out == NULL) goto failed;
5380 return 0;
5381 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005382 isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
5383 if (isinstance == -1) {
5384 return 1;
5385 }
5386 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005387 expr_ty value;
5388
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005389 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005390 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005391 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005392 if (tmp == NULL) goto failed;
5393 res = obj2ast_expr(tmp, &value, arena);
5394 if (res != 0) goto failed;
5395 Py_XDECREF(tmp);
5396 tmp = NULL;
5397 } else {
5398 value = NULL;
5399 }
Benjamin Peterson527c6222012-01-14 08:58:23 -05005400 *out = Yield(value, lineno, col_offset, arena);
5401 if (*out == NULL) goto failed;
5402 return 0;
5403 }
5404 isinstance = PyObject_IsInstance(obj, (PyObject*)YieldFrom_type);
5405 if (isinstance == -1) {
5406 return 1;
5407 }
5408 if (isinstance) {
5409 expr_ty value;
5410
5411 if (_PyObject_HasAttrId(obj, &PyId_value)) {
5412 int res;
5413 tmp = _PyObject_GetAttrId(obj, &PyId_value);
5414 if (tmp == NULL) goto failed;
5415 res = obj2ast_expr(tmp, &value, arena);
5416 if (res != 0) goto failed;
5417 Py_XDECREF(tmp);
5418 tmp = NULL;
5419 } else {
5420 value = NULL;
5421 }
5422 *out = YieldFrom(value, lineno, col_offset, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005423 if (*out == NULL) goto failed;
5424 return 0;
5425 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005426 isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
5427 if (isinstance == -1) {
5428 return 1;
5429 }
5430 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005431 expr_ty left;
5432 asdl_int_seq* ops;
5433 asdl_seq* comparators;
5434
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005435 if (_PyObject_HasAttrId(obj, &PyId_left)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005436 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005437 tmp = _PyObject_GetAttrId(obj, &PyId_left);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005438 if (tmp == NULL) goto failed;
5439 res = obj2ast_expr(tmp, &left, arena);
5440 if (res != 0) goto failed;
5441 Py_XDECREF(tmp);
5442 tmp = NULL;
5443 } else {
5444 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
5445 return 1;
5446 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005447 if (_PyObject_HasAttrId(obj, &PyId_ops)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005448 int res;
5449 Py_ssize_t len;
5450 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005451 tmp = _PyObject_GetAttrId(obj, &PyId_ops);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005452 if (tmp == NULL) goto failed;
5453 if (!PyList_Check(tmp)) {
5454 PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5455 goto failed;
5456 }
5457 len = PyList_GET_SIZE(tmp);
5458 ops = asdl_int_seq_new(len, arena);
5459 if (ops == NULL) goto failed;
5460 for (i = 0; i < len; i++) {
5461 cmpop_ty value;
5462 res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
5463 if (res != 0) goto failed;
5464 asdl_seq_SET(ops, i, value);
5465 }
5466 Py_XDECREF(tmp);
5467 tmp = NULL;
5468 } else {
5469 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
5470 return 1;
5471 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005472 if (_PyObject_HasAttrId(obj, &PyId_comparators)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005473 int res;
5474 Py_ssize_t len;
5475 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005476 tmp = _PyObject_GetAttrId(obj, &PyId_comparators);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005477 if (tmp == NULL) goto failed;
5478 if (!PyList_Check(tmp)) {
5479 PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5480 goto failed;
5481 }
5482 len = PyList_GET_SIZE(tmp);
5483 comparators = asdl_seq_new(len, arena);
5484 if (comparators == NULL) goto failed;
5485 for (i = 0; i < len; i++) {
5486 expr_ty value;
5487 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5488 if (res != 0) goto failed;
5489 asdl_seq_SET(comparators, i, value);
5490 }
5491 Py_XDECREF(tmp);
5492 tmp = NULL;
5493 } else {
5494 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
5495 return 1;
5496 }
5497 *out = Compare(left, ops, comparators, lineno, col_offset,
5498 arena);
5499 if (*out == NULL) goto failed;
5500 return 0;
5501 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005502 isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
5503 if (isinstance == -1) {
5504 return 1;
5505 }
5506 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005507 expr_ty func;
5508 asdl_seq* args;
5509 asdl_seq* keywords;
5510 expr_ty starargs;
5511 expr_ty kwargs;
5512
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005513 if (_PyObject_HasAttrId(obj, &PyId_func)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005514 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005515 tmp = _PyObject_GetAttrId(obj, &PyId_func);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005516 if (tmp == NULL) goto failed;
5517 res = obj2ast_expr(tmp, &func, arena);
5518 if (res != 0) goto failed;
5519 Py_XDECREF(tmp);
5520 tmp = NULL;
5521 } else {
5522 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
5523 return 1;
5524 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005525 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005526 int res;
5527 Py_ssize_t len;
5528 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005529 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005530 if (tmp == NULL) goto failed;
5531 if (!PyList_Check(tmp)) {
5532 PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5533 goto failed;
5534 }
5535 len = PyList_GET_SIZE(tmp);
5536 args = asdl_seq_new(len, arena);
5537 if (args == NULL) goto failed;
5538 for (i = 0; i < len; i++) {
5539 expr_ty value;
5540 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5541 if (res != 0) goto failed;
5542 asdl_seq_SET(args, i, value);
5543 }
5544 Py_XDECREF(tmp);
5545 tmp = NULL;
5546 } else {
5547 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
5548 return 1;
5549 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005550 if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005551 int res;
5552 Py_ssize_t len;
5553 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005554 tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005555 if (tmp == NULL) goto failed;
5556 if (!PyList_Check(tmp)) {
5557 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5558 goto failed;
5559 }
5560 len = PyList_GET_SIZE(tmp);
5561 keywords = asdl_seq_new(len, arena);
5562 if (keywords == NULL) goto failed;
5563 for (i = 0; i < len; i++) {
5564 keyword_ty value;
5565 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
5566 if (res != 0) goto failed;
5567 asdl_seq_SET(keywords, i, value);
5568 }
5569 Py_XDECREF(tmp);
5570 tmp = NULL;
5571 } else {
5572 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
5573 return 1;
5574 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005575 if (_PyObject_HasAttrId(obj, &PyId_starargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005576 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005577 tmp = _PyObject_GetAttrId(obj, &PyId_starargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005578 if (tmp == NULL) goto failed;
5579 res = obj2ast_expr(tmp, &starargs, arena);
5580 if (res != 0) goto failed;
5581 Py_XDECREF(tmp);
5582 tmp = NULL;
5583 } else {
5584 starargs = NULL;
5585 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005586 if (_PyObject_HasAttrId(obj, &PyId_kwargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005587 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005588 tmp = _PyObject_GetAttrId(obj, &PyId_kwargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005589 if (tmp == NULL) goto failed;
5590 res = obj2ast_expr(tmp, &kwargs, arena);
5591 if (res != 0) goto failed;
5592 Py_XDECREF(tmp);
5593 tmp = NULL;
5594 } else {
5595 kwargs = NULL;
5596 }
5597 *out = Call(func, args, keywords, starargs, kwargs, lineno,
5598 col_offset, arena);
5599 if (*out == NULL) goto failed;
5600 return 0;
5601 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005602 isinstance = PyObject_IsInstance(obj, (PyObject*)Num_type);
5603 if (isinstance == -1) {
5604 return 1;
5605 }
5606 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005607 object n;
5608
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005609 if (_PyObject_HasAttrId(obj, &PyId_n)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005610 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005611 tmp = _PyObject_GetAttrId(obj, &PyId_n);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005612 if (tmp == NULL) goto failed;
5613 res = obj2ast_object(tmp, &n, arena);
5614 if (res != 0) goto failed;
5615 Py_XDECREF(tmp);
5616 tmp = NULL;
5617 } else {
5618 PyErr_SetString(PyExc_TypeError, "required field \"n\" missing from Num");
5619 return 1;
5620 }
5621 *out = Num(n, lineno, col_offset, arena);
5622 if (*out == NULL) goto failed;
5623 return 0;
5624 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005625 isinstance = PyObject_IsInstance(obj, (PyObject*)Str_type);
5626 if (isinstance == -1) {
5627 return 1;
5628 }
5629 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005630 string s;
5631
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005632 if (_PyObject_HasAttrId(obj, &PyId_s)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005633 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005634 tmp = _PyObject_GetAttrId(obj, &PyId_s);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005635 if (tmp == NULL) goto failed;
5636 res = obj2ast_string(tmp, &s, arena);
5637 if (res != 0) goto failed;
5638 Py_XDECREF(tmp);
5639 tmp = NULL;
5640 } else {
5641 PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Str");
5642 return 1;
5643 }
5644 *out = Str(s, lineno, col_offset, arena);
5645 if (*out == NULL) goto failed;
5646 return 0;
5647 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005648 isinstance = PyObject_IsInstance(obj, (PyObject*)Bytes_type);
5649 if (isinstance == -1) {
5650 return 1;
5651 }
5652 if (isinstance) {
Benjamin Petersone2498412011-08-09 16:08:39 -05005653 bytes s;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005654
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005655 if (_PyObject_HasAttrId(obj, &PyId_s)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005656 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005657 tmp = _PyObject_GetAttrId(obj, &PyId_s);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005658 if (tmp == NULL) goto failed;
Benjamin Petersone2498412011-08-09 16:08:39 -05005659 res = obj2ast_bytes(tmp, &s, arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005660 if (res != 0) goto failed;
5661 Py_XDECREF(tmp);
5662 tmp = NULL;
5663 } else {
5664 PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Bytes");
5665 return 1;
5666 }
5667 *out = Bytes(s, lineno, col_offset, arena);
5668 if (*out == NULL) goto failed;
5669 return 0;
5670 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005671 isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type);
5672 if (isinstance == -1) {
5673 return 1;
5674 }
5675 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005676
5677 *out = Ellipsis(lineno, col_offset, arena);
5678 if (*out == NULL) goto failed;
5679 return 0;
5680 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005681 isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
5682 if (isinstance == -1) {
5683 return 1;
5684 }
5685 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005686 expr_ty value;
5687 identifier attr;
5688 expr_context_ty ctx;
5689
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005690 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005691 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005692 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005693 if (tmp == NULL) goto failed;
5694 res = obj2ast_expr(tmp, &value, arena);
5695 if (res != 0) goto failed;
5696 Py_XDECREF(tmp);
5697 tmp = NULL;
5698 } else {
5699 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
5700 return 1;
5701 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005702 if (_PyObject_HasAttrId(obj, &PyId_attr)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005703 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005704 tmp = _PyObject_GetAttrId(obj, &PyId_attr);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005705 if (tmp == NULL) goto failed;
5706 res = obj2ast_identifier(tmp, &attr, arena);
5707 if (res != 0) goto failed;
5708 Py_XDECREF(tmp);
5709 tmp = NULL;
5710 } else {
5711 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
5712 return 1;
5713 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005714 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005715 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005716 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005717 if (tmp == NULL) goto failed;
5718 res = obj2ast_expr_context(tmp, &ctx, arena);
5719 if (res != 0) goto failed;
5720 Py_XDECREF(tmp);
5721 tmp = NULL;
5722 } else {
5723 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
5724 return 1;
5725 }
5726 *out = Attribute(value, attr, ctx, lineno, col_offset, arena);
5727 if (*out == NULL) goto failed;
5728 return 0;
5729 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005730 isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
5731 if (isinstance == -1) {
5732 return 1;
5733 }
5734 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005735 expr_ty value;
5736 slice_ty slice;
5737 expr_context_ty ctx;
5738
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005739 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005740 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005741 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005742 if (tmp == NULL) goto failed;
5743 res = obj2ast_expr(tmp, &value, arena);
5744 if (res != 0) goto failed;
5745 Py_XDECREF(tmp);
5746 tmp = NULL;
5747 } else {
5748 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
5749 return 1;
5750 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005751 if (_PyObject_HasAttrId(obj, &PyId_slice)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005752 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005753 tmp = _PyObject_GetAttrId(obj, &PyId_slice);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005754 if (tmp == NULL) goto failed;
5755 res = obj2ast_slice(tmp, &slice, arena);
5756 if (res != 0) goto failed;
5757 Py_XDECREF(tmp);
5758 tmp = NULL;
5759 } else {
5760 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
5761 return 1;
5762 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005763 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005764 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005765 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005766 if (tmp == NULL) goto failed;
5767 res = obj2ast_expr_context(tmp, &ctx, arena);
5768 if (res != 0) goto failed;
5769 Py_XDECREF(tmp);
5770 tmp = NULL;
5771 } else {
5772 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
5773 return 1;
5774 }
5775 *out = Subscript(value, slice, ctx, lineno, col_offset, arena);
5776 if (*out == NULL) goto failed;
5777 return 0;
5778 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005779 isinstance = PyObject_IsInstance(obj, (PyObject*)Starred_type);
5780 if (isinstance == -1) {
5781 return 1;
5782 }
5783 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005784 expr_ty value;
5785 expr_context_ty ctx;
5786
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005787 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005788 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005789 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005790 if (tmp == NULL) goto failed;
5791 res = obj2ast_expr(tmp, &value, arena);
5792 if (res != 0) goto failed;
5793 Py_XDECREF(tmp);
5794 tmp = NULL;
5795 } else {
5796 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
5797 return 1;
5798 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005799 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005800 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005801 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005802 if (tmp == NULL) goto failed;
5803 res = obj2ast_expr_context(tmp, &ctx, arena);
5804 if (res != 0) goto failed;
5805 Py_XDECREF(tmp);
5806 tmp = NULL;
5807 } else {
5808 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
5809 return 1;
5810 }
5811 *out = Starred(value, ctx, lineno, col_offset, arena);
5812 if (*out == NULL) goto failed;
5813 return 0;
5814 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005815 isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
5816 if (isinstance == -1) {
5817 return 1;
5818 }
5819 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005820 identifier id;
5821 expr_context_ty ctx;
5822
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005823 if (_PyObject_HasAttrId(obj, &PyId_id)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005824 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005825 tmp = _PyObject_GetAttrId(obj, &PyId_id);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005826 if (tmp == NULL) goto failed;
5827 res = obj2ast_identifier(tmp, &id, arena);
5828 if (res != 0) goto failed;
5829 Py_XDECREF(tmp);
5830 tmp = NULL;
5831 } else {
5832 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
5833 return 1;
5834 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005835 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005836 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005837 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005838 if (tmp == NULL) goto failed;
5839 res = obj2ast_expr_context(tmp, &ctx, arena);
5840 if (res != 0) goto failed;
5841 Py_XDECREF(tmp);
5842 tmp = NULL;
5843 } else {
5844 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
5845 return 1;
5846 }
5847 *out = Name(id, ctx, lineno, col_offset, arena);
5848 if (*out == NULL) goto failed;
5849 return 0;
5850 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005851 isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
5852 if (isinstance == -1) {
5853 return 1;
5854 }
5855 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005856 asdl_seq* elts;
5857 expr_context_ty ctx;
5858
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005859 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005860 int res;
5861 Py_ssize_t len;
5862 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005863 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005864 if (tmp == NULL) goto failed;
5865 if (!PyList_Check(tmp)) {
5866 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5867 goto failed;
5868 }
5869 len = PyList_GET_SIZE(tmp);
5870 elts = asdl_seq_new(len, arena);
5871 if (elts == NULL) goto failed;
5872 for (i = 0; i < len; i++) {
5873 expr_ty value;
5874 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5875 if (res != 0) goto failed;
5876 asdl_seq_SET(elts, i, value);
5877 }
5878 Py_XDECREF(tmp);
5879 tmp = NULL;
5880 } else {
5881 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
5882 return 1;
5883 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005884 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005885 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005886 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005887 if (tmp == NULL) goto failed;
5888 res = obj2ast_expr_context(tmp, &ctx, arena);
5889 if (res != 0) goto failed;
5890 Py_XDECREF(tmp);
5891 tmp = NULL;
5892 } else {
5893 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
5894 return 1;
5895 }
5896 *out = List(elts, ctx, lineno, col_offset, arena);
5897 if (*out == NULL) goto failed;
5898 return 0;
5899 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005900 isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
5901 if (isinstance == -1) {
5902 return 1;
5903 }
5904 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005905 asdl_seq* elts;
5906 expr_context_ty ctx;
5907
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005908 if (_PyObject_HasAttrId(obj, &PyId_elts)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005909 int res;
5910 Py_ssize_t len;
5911 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005912 tmp = _PyObject_GetAttrId(obj, &PyId_elts);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005913 if (tmp == NULL) goto failed;
5914 if (!PyList_Check(tmp)) {
5915 PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5916 goto failed;
5917 }
5918 len = PyList_GET_SIZE(tmp);
5919 elts = asdl_seq_new(len, arena);
5920 if (elts == NULL) goto failed;
5921 for (i = 0; i < len; i++) {
5922 expr_ty value;
5923 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5924 if (res != 0) goto failed;
5925 asdl_seq_SET(elts, i, value);
5926 }
5927 Py_XDECREF(tmp);
5928 tmp = NULL;
5929 } else {
5930 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
5931 return 1;
5932 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005933 if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005934 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02005935 tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005936 if (tmp == NULL) goto failed;
5937 res = obj2ast_expr_context(tmp, &ctx, arena);
5938 if (res != 0) goto failed;
5939 Py_XDECREF(tmp);
5940 tmp = NULL;
5941 } else {
5942 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
5943 return 1;
5944 }
5945 *out = Tuple(elts, ctx, lineno, col_offset, arena);
5946 if (*out == NULL) goto failed;
5947 return 0;
5948 }
5949
Benjamin Peterson5b066812010-11-20 01:38:49 +00005950 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
5951 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00005952 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005953 return 1;
5954}
5955
5956int
5957obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
5958{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005959 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005960
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005961 isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
5962 if (isinstance == -1) {
5963 return 1;
5964 }
5965 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005966 *out = Load;
5967 return 0;
5968 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005969 isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
5970 if (isinstance == -1) {
5971 return 1;
5972 }
5973 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005974 *out = Store;
5975 return 0;
5976 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005977 isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
5978 if (isinstance == -1) {
5979 return 1;
5980 }
5981 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005982 *out = Del;
5983 return 0;
5984 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005985 isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
5986 if (isinstance == -1) {
5987 return 1;
5988 }
5989 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005990 *out = AugLoad;
5991 return 0;
5992 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00005993 isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
5994 if (isinstance == -1) {
5995 return 1;
5996 }
5997 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005998 *out = AugStore;
5999 return 0;
6000 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006001 isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
6002 if (isinstance == -1) {
6003 return 1;
6004 }
6005 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006006 *out = Param;
6007 return 0;
6008 }
6009
Benjamin Peterson5b066812010-11-20 01:38:49 +00006010 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006011 return 1;
6012}
6013
6014int
6015obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
6016{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006017 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006018
Benjamin Petersond8f65972010-11-20 04:31:07 +00006019 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006020
6021 if (obj == Py_None) {
6022 *out = NULL;
6023 return 0;
6024 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006025 isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
6026 if (isinstance == -1) {
6027 return 1;
6028 }
6029 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006030 expr_ty lower;
6031 expr_ty upper;
6032 expr_ty step;
6033
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006034 if (_PyObject_HasAttrId(obj, &PyId_lower)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006035 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006036 tmp = _PyObject_GetAttrId(obj, &PyId_lower);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006037 if (tmp == NULL) goto failed;
6038 res = obj2ast_expr(tmp, &lower, arena);
6039 if (res != 0) goto failed;
6040 Py_XDECREF(tmp);
6041 tmp = NULL;
6042 } else {
6043 lower = NULL;
6044 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006045 if (_PyObject_HasAttrId(obj, &PyId_upper)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006046 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006047 tmp = _PyObject_GetAttrId(obj, &PyId_upper);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006048 if (tmp == NULL) goto failed;
6049 res = obj2ast_expr(tmp, &upper, arena);
6050 if (res != 0) goto failed;
6051 Py_XDECREF(tmp);
6052 tmp = NULL;
6053 } else {
6054 upper = NULL;
6055 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006056 if (_PyObject_HasAttrId(obj, &PyId_step)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006057 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006058 tmp = _PyObject_GetAttrId(obj, &PyId_step);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006059 if (tmp == NULL) goto failed;
6060 res = obj2ast_expr(tmp, &step, arena);
6061 if (res != 0) goto failed;
6062 Py_XDECREF(tmp);
6063 tmp = NULL;
6064 } else {
6065 step = NULL;
6066 }
6067 *out = Slice(lower, upper, step, arena);
6068 if (*out == NULL) goto failed;
6069 return 0;
6070 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006071 isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
6072 if (isinstance == -1) {
6073 return 1;
6074 }
6075 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006076 asdl_seq* dims;
6077
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006078 if (_PyObject_HasAttrId(obj, &PyId_dims)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006079 int res;
6080 Py_ssize_t len;
6081 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006082 tmp = _PyObject_GetAttrId(obj, &PyId_dims);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006083 if (tmp == NULL) goto failed;
6084 if (!PyList_Check(tmp)) {
6085 PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6086 goto failed;
6087 }
6088 len = PyList_GET_SIZE(tmp);
6089 dims = asdl_seq_new(len, arena);
6090 if (dims == NULL) goto failed;
6091 for (i = 0; i < len; i++) {
6092 slice_ty value;
6093 res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
6094 if (res != 0) goto failed;
6095 asdl_seq_SET(dims, i, value);
6096 }
6097 Py_XDECREF(tmp);
6098 tmp = NULL;
6099 } else {
6100 PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
6101 return 1;
6102 }
6103 *out = ExtSlice(dims, arena);
6104 if (*out == NULL) goto failed;
6105 return 0;
6106 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006107 isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
6108 if (isinstance == -1) {
6109 return 1;
6110 }
6111 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006112 expr_ty value;
6113
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006114 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006115 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006116 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006117 if (tmp == NULL) goto failed;
6118 res = obj2ast_expr(tmp, &value, arena);
6119 if (res != 0) goto failed;
6120 Py_XDECREF(tmp);
6121 tmp = NULL;
6122 } else {
6123 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
6124 return 1;
6125 }
6126 *out = Index(value, arena);
6127 if (*out == NULL) goto failed;
6128 return 0;
6129 }
6130
Benjamin Peterson5b066812010-11-20 01:38:49 +00006131 PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %R", obj);
6132 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00006133 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006134 return 1;
6135}
6136
6137int
6138obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
6139{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006140 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006141
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006142 isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
6143 if (isinstance == -1) {
6144 return 1;
6145 }
6146 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006147 *out = And;
6148 return 0;
6149 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006150 isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
6151 if (isinstance == -1) {
6152 return 1;
6153 }
6154 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006155 *out = Or;
6156 return 0;
6157 }
6158
Benjamin Peterson5b066812010-11-20 01:38:49 +00006159 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006160 return 1;
6161}
6162
6163int
6164obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
6165{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006166 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006167
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006168 isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
6169 if (isinstance == -1) {
6170 return 1;
6171 }
6172 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006173 *out = Add;
6174 return 0;
6175 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006176 isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
6177 if (isinstance == -1) {
6178 return 1;
6179 }
6180 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006181 *out = Sub;
6182 return 0;
6183 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006184 isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
6185 if (isinstance == -1) {
6186 return 1;
6187 }
6188 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006189 *out = Mult;
6190 return 0;
6191 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006192 isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
6193 if (isinstance == -1) {
6194 return 1;
6195 }
6196 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006197 *out = Div;
6198 return 0;
6199 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006200 isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
6201 if (isinstance == -1) {
6202 return 1;
6203 }
6204 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006205 *out = Mod;
6206 return 0;
6207 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006208 isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
6209 if (isinstance == -1) {
6210 return 1;
6211 }
6212 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006213 *out = Pow;
6214 return 0;
6215 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006216 isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
6217 if (isinstance == -1) {
6218 return 1;
6219 }
6220 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006221 *out = LShift;
6222 return 0;
6223 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006224 isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
6225 if (isinstance == -1) {
6226 return 1;
6227 }
6228 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006229 *out = RShift;
6230 return 0;
6231 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006232 isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
6233 if (isinstance == -1) {
6234 return 1;
6235 }
6236 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006237 *out = BitOr;
6238 return 0;
6239 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006240 isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
6241 if (isinstance == -1) {
6242 return 1;
6243 }
6244 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006245 *out = BitXor;
6246 return 0;
6247 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006248 isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
6249 if (isinstance == -1) {
6250 return 1;
6251 }
6252 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006253 *out = BitAnd;
6254 return 0;
6255 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006256 isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
6257 if (isinstance == -1) {
6258 return 1;
6259 }
6260 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006261 *out = FloorDiv;
6262 return 0;
6263 }
6264
Benjamin Peterson5b066812010-11-20 01:38:49 +00006265 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006266 return 1;
6267}
6268
6269int
6270obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
6271{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006272 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006273
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006274 isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
6275 if (isinstance == -1) {
6276 return 1;
6277 }
6278 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006279 *out = Invert;
6280 return 0;
6281 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006282 isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
6283 if (isinstance == -1) {
6284 return 1;
6285 }
6286 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006287 *out = Not;
6288 return 0;
6289 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006290 isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
6291 if (isinstance == -1) {
6292 return 1;
6293 }
6294 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006295 *out = UAdd;
6296 return 0;
6297 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006298 isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
6299 if (isinstance == -1) {
6300 return 1;
6301 }
6302 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006303 *out = USub;
6304 return 0;
6305 }
6306
Benjamin Peterson5b066812010-11-20 01:38:49 +00006307 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006308 return 1;
6309}
6310
6311int
6312obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
6313{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006314 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006315
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006316 isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
6317 if (isinstance == -1) {
6318 return 1;
6319 }
6320 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006321 *out = Eq;
6322 return 0;
6323 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006324 isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
6325 if (isinstance == -1) {
6326 return 1;
6327 }
6328 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006329 *out = NotEq;
6330 return 0;
6331 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006332 isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
6333 if (isinstance == -1) {
6334 return 1;
6335 }
6336 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006337 *out = Lt;
6338 return 0;
6339 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006340 isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
6341 if (isinstance == -1) {
6342 return 1;
6343 }
6344 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006345 *out = LtE;
6346 return 0;
6347 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006348 isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
6349 if (isinstance == -1) {
6350 return 1;
6351 }
6352 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006353 *out = Gt;
6354 return 0;
6355 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006356 isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
6357 if (isinstance == -1) {
6358 return 1;
6359 }
6360 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006361 *out = GtE;
6362 return 0;
6363 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006364 isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
6365 if (isinstance == -1) {
6366 return 1;
6367 }
6368 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006369 *out = Is;
6370 return 0;
6371 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006372 isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
6373 if (isinstance == -1) {
6374 return 1;
6375 }
6376 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006377 *out = IsNot;
6378 return 0;
6379 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006380 isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
6381 if (isinstance == -1) {
6382 return 1;
6383 }
6384 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006385 *out = In;
6386 return 0;
6387 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006388 isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
6389 if (isinstance == -1) {
6390 return 1;
6391 }
6392 if (isinstance) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006393 *out = NotIn;
6394 return 0;
6395 }
6396
Benjamin Peterson5b066812010-11-20 01:38:49 +00006397 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006398 return 1;
6399}
6400
6401int
6402obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
6403{
6404 PyObject* tmp = NULL;
6405 expr_ty target;
6406 expr_ty iter;
6407 asdl_seq* ifs;
6408
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006409 if (_PyObject_HasAttrId(obj, &PyId_target)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006410 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006411 tmp = _PyObject_GetAttrId(obj, &PyId_target);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006412 if (tmp == NULL) goto failed;
6413 res = obj2ast_expr(tmp, &target, arena);
6414 if (res != 0) goto failed;
6415 Py_XDECREF(tmp);
6416 tmp = NULL;
6417 } else {
6418 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
6419 return 1;
6420 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006421 if (_PyObject_HasAttrId(obj, &PyId_iter)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006422 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006423 tmp = _PyObject_GetAttrId(obj, &PyId_iter);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006424 if (tmp == NULL) goto failed;
6425 res = obj2ast_expr(tmp, &iter, arena);
6426 if (res != 0) goto failed;
6427 Py_XDECREF(tmp);
6428 tmp = NULL;
6429 } else {
6430 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
6431 return 1;
6432 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006433 if (_PyObject_HasAttrId(obj, &PyId_ifs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006434 int res;
6435 Py_ssize_t len;
6436 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006437 tmp = _PyObject_GetAttrId(obj, &PyId_ifs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006438 if (tmp == NULL) goto failed;
6439 if (!PyList_Check(tmp)) {
6440 PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6441 goto failed;
6442 }
6443 len = PyList_GET_SIZE(tmp);
6444 ifs = asdl_seq_new(len, arena);
6445 if (ifs == NULL) goto failed;
6446 for (i = 0; i < len; i++) {
6447 expr_ty value;
6448 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6449 if (res != 0) goto failed;
6450 asdl_seq_SET(ifs, i, value);
6451 }
6452 Py_XDECREF(tmp);
6453 tmp = NULL;
6454 } else {
6455 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
6456 return 1;
6457 }
6458 *out = comprehension(target, iter, ifs, arena);
6459 return 0;
6460failed:
6461 Py_XDECREF(tmp);
6462 return 1;
6463}
6464
6465int
6466obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
6467{
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006468 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00006469
Benjamin Petersond8f65972010-11-20 04:31:07 +00006470 PyObject *tmp = NULL;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006471 int lineno;
6472 int col_offset;
6473
Neal Norwitzad74aa82008-03-31 05:14:30 +00006474 if (obj == Py_None) {
6475 *out = NULL;
6476 return 0;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006477 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006478 if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006479 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006480 tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006481 if (tmp == NULL) goto failed;
6482 res = obj2ast_int(tmp, &lineno, arena);
6483 if (res != 0) goto failed;
6484 Py_XDECREF(tmp);
6485 tmp = NULL;
6486 } else {
6487 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
6488 return 1;
6489 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006490 if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006491 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006492 tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006493 if (tmp == NULL) goto failed;
6494 res = obj2ast_int(tmp, &col_offset, arena);
6495 if (res != 0) goto failed;
6496 Py_XDECREF(tmp);
6497 tmp = NULL;
6498 } else {
6499 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
6500 return 1;
6501 }
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00006502 isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
6503 if (isinstance == -1) {
6504 return 1;
6505 }
6506 if (isinstance) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006507 expr_ty type;
6508 identifier name;
6509 asdl_seq* body;
6510
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006511 if (_PyObject_HasAttrId(obj, &PyId_type)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006512 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006513 tmp = _PyObject_GetAttrId(obj, &PyId_type);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006514 if (tmp == NULL) goto failed;
6515 res = obj2ast_expr(tmp, &type, arena);
6516 if (res != 0) goto failed;
6517 Py_XDECREF(tmp);
6518 tmp = NULL;
6519 } else {
6520 type = NULL;
6521 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006522 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006523 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006524 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006525 if (tmp == NULL) goto failed;
6526 res = obj2ast_identifier(tmp, &name, arena);
6527 if (res != 0) goto failed;
6528 Py_XDECREF(tmp);
6529 tmp = NULL;
6530 } else {
6531 name = NULL;
6532 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006533 if (_PyObject_HasAttrId(obj, &PyId_body)) {
Neal Norwitzad74aa82008-03-31 05:14:30 +00006534 int res;
6535 Py_ssize_t len;
6536 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006537 tmp = _PyObject_GetAttrId(obj, &PyId_body);
Neal Norwitzad74aa82008-03-31 05:14:30 +00006538 if (tmp == NULL) goto failed;
6539 if (!PyList_Check(tmp)) {
6540 PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6541 goto failed;
6542 }
6543 len = PyList_GET_SIZE(tmp);
6544 body = asdl_seq_new(len, arena);
6545 if (body == NULL) goto failed;
6546 for (i = 0; i < len; i++) {
6547 stmt_ty value;
6548 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
6549 if (res != 0) goto failed;
6550 asdl_seq_SET(body, i, value);
6551 }
6552 Py_XDECREF(tmp);
6553 tmp = NULL;
6554 } else {
6555 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
6556 return 1;
6557 }
6558 *out = ExceptHandler(type, name, body, lineno, col_offset,
6559 arena);
6560 if (*out == NULL) goto failed;
6561 return 0;
6562 }
6563
Benjamin Peterson5b066812010-11-20 01:38:49 +00006564 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
6565 failed:
Benjamin Peterson0a4dae52010-11-21 15:12:34 +00006566 Py_XDECREF(tmp);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006567 return 1;
6568}
6569
6570int
6571obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
6572{
6573 PyObject* tmp = NULL;
6574 asdl_seq* args;
6575 identifier vararg;
6576 expr_ty varargannotation;
6577 asdl_seq* kwonlyargs;
6578 identifier kwarg;
6579 expr_ty kwargannotation;
6580 asdl_seq* defaults;
6581 asdl_seq* kw_defaults;
6582
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006583 if (_PyObject_HasAttrId(obj, &PyId_args)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006584 int res;
6585 Py_ssize_t len;
6586 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006587 tmp = _PyObject_GetAttrId(obj, &PyId_args);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006588 if (tmp == NULL) goto failed;
6589 if (!PyList_Check(tmp)) {
6590 PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6591 goto failed;
6592 }
6593 len = PyList_GET_SIZE(tmp);
6594 args = asdl_seq_new(len, arena);
6595 if (args == NULL) goto failed;
6596 for (i = 0; i < len; i++) {
6597 arg_ty value;
6598 res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
6599 if (res != 0) goto failed;
6600 asdl_seq_SET(args, i, value);
6601 }
6602 Py_XDECREF(tmp);
6603 tmp = NULL;
6604 } else {
6605 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
6606 return 1;
6607 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006608 if (_PyObject_HasAttrId(obj, &PyId_vararg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006609 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006610 tmp = _PyObject_GetAttrId(obj, &PyId_vararg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006611 if (tmp == NULL) goto failed;
6612 res = obj2ast_identifier(tmp, &vararg, arena);
6613 if (res != 0) goto failed;
6614 Py_XDECREF(tmp);
6615 tmp = NULL;
6616 } else {
6617 vararg = NULL;
6618 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006619 if (_PyObject_HasAttrId(obj, &PyId_varargannotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006620 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006621 tmp = _PyObject_GetAttrId(obj, &PyId_varargannotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006622 if (tmp == NULL) goto failed;
6623 res = obj2ast_expr(tmp, &varargannotation, arena);
6624 if (res != 0) goto failed;
6625 Py_XDECREF(tmp);
6626 tmp = NULL;
6627 } else {
6628 varargannotation = NULL;
6629 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006630 if (_PyObject_HasAttrId(obj, &PyId_kwonlyargs)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006631 int res;
6632 Py_ssize_t len;
6633 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006634 tmp = _PyObject_GetAttrId(obj, &PyId_kwonlyargs);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006635 if (tmp == NULL) goto failed;
6636 if (!PyList_Check(tmp)) {
6637 PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6638 goto failed;
6639 }
6640 len = PyList_GET_SIZE(tmp);
6641 kwonlyargs = asdl_seq_new(len, arena);
6642 if (kwonlyargs == NULL) goto failed;
6643 for (i = 0; i < len; i++) {
6644 arg_ty value;
6645 res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
6646 if (res != 0) goto failed;
6647 asdl_seq_SET(kwonlyargs, i, value);
6648 }
6649 Py_XDECREF(tmp);
6650 tmp = NULL;
6651 } else {
6652 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
6653 return 1;
6654 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006655 if (_PyObject_HasAttrId(obj, &PyId_kwarg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006656 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006657 tmp = _PyObject_GetAttrId(obj, &PyId_kwarg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006658 if (tmp == NULL) goto failed;
6659 res = obj2ast_identifier(tmp, &kwarg, arena);
6660 if (res != 0) goto failed;
6661 Py_XDECREF(tmp);
6662 tmp = NULL;
6663 } else {
6664 kwarg = NULL;
6665 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006666 if (_PyObject_HasAttrId(obj, &PyId_kwargannotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006667 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006668 tmp = _PyObject_GetAttrId(obj, &PyId_kwargannotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006669 if (tmp == NULL) goto failed;
6670 res = obj2ast_expr(tmp, &kwargannotation, arena);
6671 if (res != 0) goto failed;
6672 Py_XDECREF(tmp);
6673 tmp = NULL;
6674 } else {
6675 kwargannotation = NULL;
6676 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006677 if (_PyObject_HasAttrId(obj, &PyId_defaults)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006678 int res;
6679 Py_ssize_t len;
6680 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006681 tmp = _PyObject_GetAttrId(obj, &PyId_defaults);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006682 if (tmp == NULL) goto failed;
6683 if (!PyList_Check(tmp)) {
6684 PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6685 goto failed;
6686 }
6687 len = PyList_GET_SIZE(tmp);
6688 defaults = asdl_seq_new(len, arena);
6689 if (defaults == NULL) goto failed;
6690 for (i = 0; i < len; i++) {
6691 expr_ty value;
6692 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6693 if (res != 0) goto failed;
6694 asdl_seq_SET(defaults, i, value);
6695 }
6696 Py_XDECREF(tmp);
6697 tmp = NULL;
6698 } else {
6699 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
6700 return 1;
6701 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006702 if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006703 int res;
6704 Py_ssize_t len;
6705 Py_ssize_t i;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006706 tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006707 if (tmp == NULL) goto failed;
6708 if (!PyList_Check(tmp)) {
6709 PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6710 goto failed;
6711 }
6712 len = PyList_GET_SIZE(tmp);
6713 kw_defaults = asdl_seq_new(len, arena);
6714 if (kw_defaults == NULL) goto failed;
6715 for (i = 0; i < len; i++) {
6716 expr_ty value;
6717 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6718 if (res != 0) goto failed;
6719 asdl_seq_SET(kw_defaults, i, value);
6720 }
6721 Py_XDECREF(tmp);
6722 tmp = NULL;
6723 } else {
6724 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
6725 return 1;
6726 }
6727 *out = arguments(args, vararg, varargannotation, kwonlyargs, kwarg,
6728 kwargannotation, defaults, kw_defaults, arena);
6729 return 0;
6730failed:
6731 Py_XDECREF(tmp);
6732 return 1;
6733}
6734
6735int
6736obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena)
6737{
6738 PyObject* tmp = NULL;
6739 identifier arg;
6740 expr_ty annotation;
6741
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006742 if (_PyObject_HasAttrId(obj, &PyId_arg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006743 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006744 tmp = _PyObject_GetAttrId(obj, &PyId_arg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006745 if (tmp == NULL) goto failed;
6746 res = obj2ast_identifier(tmp, &arg, arena);
6747 if (res != 0) goto failed;
6748 Py_XDECREF(tmp);
6749 tmp = NULL;
6750 } else {
6751 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
6752 return 1;
6753 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006754 if (_PyObject_HasAttrId(obj, &PyId_annotation)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006755 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006756 tmp = _PyObject_GetAttrId(obj, &PyId_annotation);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006757 if (tmp == NULL) goto failed;
6758 res = obj2ast_expr(tmp, &annotation, arena);
6759 if (res != 0) goto failed;
6760 Py_XDECREF(tmp);
6761 tmp = NULL;
6762 } else {
6763 annotation = NULL;
6764 }
6765 *out = arg(arg, annotation, arena);
6766 return 0;
6767failed:
6768 Py_XDECREF(tmp);
6769 return 1;
6770}
6771
6772int
6773obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
6774{
6775 PyObject* tmp = NULL;
6776 identifier arg;
6777 expr_ty value;
6778
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006779 if (_PyObject_HasAttrId(obj, &PyId_arg)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006780 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006781 tmp = _PyObject_GetAttrId(obj, &PyId_arg);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006782 if (tmp == NULL) goto failed;
6783 res = obj2ast_identifier(tmp, &arg, arena);
6784 if (res != 0) goto failed;
6785 Py_XDECREF(tmp);
6786 tmp = NULL;
6787 } else {
6788 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from keyword");
6789 return 1;
6790 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006791 if (_PyObject_HasAttrId(obj, &PyId_value)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006792 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006793 tmp = _PyObject_GetAttrId(obj, &PyId_value);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006794 if (tmp == NULL) goto failed;
6795 res = obj2ast_expr(tmp, &value, arena);
6796 if (res != 0) goto failed;
6797 Py_XDECREF(tmp);
6798 tmp = NULL;
6799 } else {
6800 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
6801 return 1;
6802 }
6803 *out = keyword(arg, value, arena);
6804 return 0;
6805failed:
6806 Py_XDECREF(tmp);
6807 return 1;
6808}
6809
6810int
6811obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
6812{
6813 PyObject* tmp = NULL;
6814 identifier name;
6815 identifier asname;
6816
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006817 if (_PyObject_HasAttrId(obj, &PyId_name)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006818 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006819 tmp = _PyObject_GetAttrId(obj, &PyId_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006820 if (tmp == NULL) goto failed;
6821 res = obj2ast_identifier(tmp, &name, arena);
6822 if (res != 0) goto failed;
6823 Py_XDECREF(tmp);
6824 tmp = NULL;
6825 } else {
6826 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
6827 return 1;
6828 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006829 if (_PyObject_HasAttrId(obj, &PyId_asname)) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006830 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006831 tmp = _PyObject_GetAttrId(obj, &PyId_asname);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006832 if (tmp == NULL) goto failed;
6833 res = obj2ast_identifier(tmp, &asname, arena);
6834 if (res != 0) goto failed;
6835 Py_XDECREF(tmp);
6836 tmp = NULL;
6837 } else {
6838 asname = NULL;
6839 }
6840 *out = alias(name, asname, arena);
6841 return 0;
6842failed:
6843 Py_XDECREF(tmp);
6844 return 1;
6845}
6846
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006847int
6848obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena)
6849{
6850 PyObject* tmp = NULL;
6851 expr_ty context_expr;
6852 expr_ty optional_vars;
6853
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006854 if (_PyObject_HasAttrId(obj, &PyId_context_expr)) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006855 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006856 tmp = _PyObject_GetAttrId(obj, &PyId_context_expr);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006857 if (tmp == NULL) goto failed;
6858 res = obj2ast_expr(tmp, &context_expr, arena);
6859 if (res != 0) goto failed;
6860 Py_XDECREF(tmp);
6861 tmp = NULL;
6862 } else {
6863 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
6864 return 1;
6865 }
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006866 if (_PyObject_HasAttrId(obj, &PyId_optional_vars)) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006867 int res;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02006868 tmp = _PyObject_GetAttrId(obj, &PyId_optional_vars);
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05006869 if (tmp == NULL) goto failed;
6870 res = obj2ast_expr(tmp, &optional_vars, arena);
6871 if (res != 0) goto failed;
6872 Py_XDECREF(tmp);
6873 tmp = NULL;
6874 } else {
6875 optional_vars = NULL;
6876 }
6877 *out = withitem(context_expr, optional_vars, arena);
6878 return 0;
6879failed:
6880 Py_XDECREF(tmp);
6881 return 1;
6882}
6883
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00006884
Martin v. Löwis1a214512008-06-11 05:26:20 +00006885static struct PyModuleDef _astmodule = {
6886 PyModuleDef_HEAD_INIT, "_ast"
6887};
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006888PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00006889PyInit__ast(void)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006890{
6891 PyObject *m, *d;
Martin v. Löwis1a214512008-06-11 05:26:20 +00006892 if (!init_types()) return NULL;
6893 m = PyModule_Create(&_astmodule);
6894 if (!m) return NULL;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006895 d = PyModule_GetDict(m);
Martin v. Löwis1a214512008-06-11 05:26:20 +00006896 if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return
6897 NULL;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00006898 if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006899 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +00006900 if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return
6901 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006902 if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006903 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006904 if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006905 < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006906 if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006907 0) return NULL;
6908 if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return
6909 NULL;
6910 if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return
6911 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006912 if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006913 < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006914 if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006915 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006916 if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006917 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006918 if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006919 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006920 if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006921 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006922 if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006923 0) return NULL;
6924 if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return
6925 NULL;
6926 if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
6927 NULL;
6928 if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
6929 if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return
6930 NULL;
6931 if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
6932 NULL;
Benjamin Peterson43af12b2011-05-29 11:43:10 -05006933 if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return
6934 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006935 if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006936 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006937 if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006938 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006939 if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006940 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006941 if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006942 return NULL;
Jeremy Hylton81e95022007-02-27 06:50:52 +00006943 if (PyDict_SetItemString(d, "Nonlocal", (PyObject*)Nonlocal_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006944 return NULL;
6945 if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return
6946 NULL;
6947 if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return
6948 NULL;
6949 if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return
6950 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006951 if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006952 return NULL;
6953 if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return
6954 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006955 if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006956 return NULL;
6957 if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return
6958 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006959 if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006960 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006961 if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006962 return NULL;
6963 if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return
6964 NULL;
6965 if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return
6966 NULL;
6967 if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return
6968 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006969 if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006970 return NULL;
Nick Coghlan650f0d02007-04-15 12:05:43 +00006971 if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006972 return NULL;
Guido van Rossum992d4a32007-07-11 13:09:30 +00006973 if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006974 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006975 if (PyDict_SetItemString(d, "GeneratorExp",
Martin v. Löwis1a214512008-06-11 05:26:20 +00006976 (PyObject*)GeneratorExp_type) < 0) return NULL;
6977 if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
6978 NULL;
Benjamin Peterson527c6222012-01-14 08:58:23 -05006979 if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) <
6980 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006981 if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006982 return NULL;
6983 if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return
6984 NULL;
6985 if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return
6986 NULL;
6987 if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return
6988 NULL;
6989 if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return
6990 NULL;
Georg Brandl52318d62006-09-06 07:06:08 +00006991 if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006992 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006993 if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006994 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006995 if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00006996 0) return NULL;
Guido van Rossum0368b722007-05-11 16:50:42 +00006997 if (PyDict_SetItemString(d, "Starred", (PyObject*)Starred_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00006998 return NULL;
6999 if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return
7000 NULL;
7001 if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return
7002 NULL;
7003 if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return
7004 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007005 if (PyDict_SetItemString(d, "expr_context",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007006 (PyObject*)expr_context_type) < 0) return NULL;
7007 if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return
7008 NULL;
7009 if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return
7010 NULL;
7011 if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return
7012 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007013 if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007014 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007015 if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007016 return NULL;
7017 if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return
7018 NULL;
7019 if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return
7020 NULL;
7021 if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return
7022 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007023 if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007024 return NULL;
7025 if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return
7026 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007027 if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007028 return NULL;
7029 if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return
7030 NULL;
7031 if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007032 if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007033 return NULL;
7034 if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return
7035 NULL;
7036 if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return
7037 NULL;
7038 if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return
7039 NULL;
7040 if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return
7041 NULL;
7042 if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return
7043 NULL;
7044 if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return
7045 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007046 if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007047 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007048 if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007049 return NULL;
7050 if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return
7051 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007052 if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007053 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007054 if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007055 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007056 if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007057 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007058 if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007059 return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007060 if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007061 return NULL;
7062 if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return
7063 NULL;
7064 if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return
7065 NULL;
7066 if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return
7067 NULL;
7068 if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return
7069 NULL;
7070 if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return NULL;
7071 if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return
7072 NULL;
7073 if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return NULL;
7074 if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return
7075 NULL;
7076 if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return NULL;
7077 if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return
7078 NULL;
7079 if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return NULL;
7080 if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return
7081 NULL;
7082 if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return NULL;
7083 if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return
7084 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007085 if (PyDict_SetItemString(d, "comprehension",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007086 (PyObject*)comprehension_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007087 if (PyDict_SetItemString(d, "excepthandler",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007088 (PyObject*)excepthandler_type) < 0) return NULL;
Neal Norwitzad74aa82008-03-31 05:14:30 +00007089 if (PyDict_SetItemString(d, "ExceptHandler",
Martin v. Löwis1a214512008-06-11 05:26:20 +00007090 (PyObject*)ExceptHandler_type) < 0) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007091 if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) <
Martin v. Löwis1a214512008-06-11 05:26:20 +00007092 0) return NULL;
7093 if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return
7094 NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007095 if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00007096 return NULL;
7097 if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return
7098 NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05007099 if (PyDict_SetItemString(d, "withitem", (PyObject*)withitem_type) < 0)
7100 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +00007101 return m;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00007102}
7103
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007104
Martin v. Löwisbd260da2006-02-26 19:42:26 +00007105PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007106{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00007107 init_types();
7108 return ast2obj_mod(t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007109}
Martin v. Löwis5b222132007-06-10 09:51:05 +00007110
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007111/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
7112mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007113{
7114 mod_ty res;
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007115 PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type,
7116 (PyObject*)Interactive_type};
7117 char *req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00007118 int isinstance;
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007119 assert(0 <= mode && mode <= 2);
7120
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007121 init_types();
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007122
Benjamin Peterson0496c9e2009-12-13 01:24:58 +00007123 isinstance = PyObject_IsInstance(ast, req_type[mode]);
7124 if (isinstance == -1)
7125 return NULL;
7126 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +00007127 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
7128 req_name[mode], Py_TYPE(ast)->tp_name);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007129 return NULL;
7130 }
7131 if (obj2ast_mod(ast, &res, arena) != 0)
7132 return NULL;
7133 else
7134 return res;
7135}
7136
7137int PyAST_Check(PyObject* obj)
7138{
7139 init_types();
Neal Norwitz207c9f32008-03-31 04:42:11 +00007140 return PyObject_IsInstance(obj, (PyObject*)&AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007141}
7142
Martin v. Löwis5b222132007-06-10 09:51:05 +00007143