blob: cf2712918394885c14153626e4d60bd616b2c2d8 [file] [log] [blame]
Neal Norwitz897ff812005-12-11 21:18:22 +00001/* File automatically generated by Parser/asdl_c.py */
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002
3#include "Python.h"
4#include "Python-ast.h"
5
Martin v. Löwisbd260da2006-02-26 19:42:26 +00006PyTypeObject *mod_type;
7static PyObject* ast2obj_mod(void*);
8PyTypeObject *Module_type;
9char *Module_fields[]={
10 "body",
11};
12PyTypeObject *Interactive_type;
13char *Interactive_fields[]={
14 "body",
15};
16PyTypeObject *Expression_type;
17char *Expression_fields[]={
18 "body",
19};
20PyTypeObject *Suite_type;
21char *Suite_fields[]={
22 "body",
23};
24PyTypeObject *stmt_type;
25static PyObject* ast2obj_stmt(void*);
26PyTypeObject *FunctionDef_type;
27char *FunctionDef_fields[]={
28 "name",
29 "args",
30 "body",
31 "decorators",
32};
33PyTypeObject *ClassDef_type;
34char *ClassDef_fields[]={
35 "name",
36 "bases",
37 "body",
38};
39PyTypeObject *Return_type;
40char *Return_fields[]={
41 "value",
42};
43PyTypeObject *Delete_type;
44char *Delete_fields[]={
45 "targets",
46};
47PyTypeObject *Assign_type;
48char *Assign_fields[]={
49 "targets",
50 "value",
51};
52PyTypeObject *AugAssign_type;
53char *AugAssign_fields[]={
54 "target",
55 "op",
56 "value",
57};
58PyTypeObject *Print_type;
59char *Print_fields[]={
60 "dest",
61 "values",
62 "nl",
63};
64PyTypeObject *For_type;
65char *For_fields[]={
66 "target",
67 "iter",
68 "body",
69 "orelse",
70};
71PyTypeObject *While_type;
72char *While_fields[]={
73 "test",
74 "body",
75 "orelse",
76};
77PyTypeObject *If_type;
78char *If_fields[]={
79 "test",
80 "body",
81 "orelse",
82};
83PyTypeObject *Raise_type;
84char *Raise_fields[]={
85 "type",
86 "inst",
87 "tback",
88};
89PyTypeObject *TryExcept_type;
90char *TryExcept_fields[]={
91 "body",
92 "handlers",
93 "orelse",
94};
95PyTypeObject *TryFinally_type;
96char *TryFinally_fields[]={
97 "body",
98 "finalbody",
99};
100PyTypeObject *Assert_type;
101char *Assert_fields[]={
102 "test",
103 "msg",
104};
105PyTypeObject *Import_type;
106char *Import_fields[]={
107 "names",
108};
109PyTypeObject *ImportFrom_type;
110char *ImportFrom_fields[]={
111 "module",
112 "names",
113};
114PyTypeObject *Exec_type;
115char *Exec_fields[]={
116 "body",
117 "globals",
118 "locals",
119};
120PyTypeObject *Global_type;
121char *Global_fields[]={
122 "names",
123};
124PyTypeObject *Expr_type;
125char *Expr_fields[]={
126 "value",
127};
128PyTypeObject *Pass_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000129PyTypeObject *Break_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000130PyTypeObject *Continue_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000131PyTypeObject *expr_type;
132static PyObject* ast2obj_expr(void*);
133PyTypeObject *BoolOp_type;
134char *BoolOp_fields[]={
135 "op",
136 "values",
137};
138PyTypeObject *BinOp_type;
139char *BinOp_fields[]={
140 "left",
141 "op",
142 "right",
143};
144PyTypeObject *UnaryOp_type;
145char *UnaryOp_fields[]={
146 "op",
147 "operand",
148};
149PyTypeObject *Lambda_type;
150char *Lambda_fields[]={
151 "args",
152 "body",
153};
154PyTypeObject *Dict_type;
155char *Dict_fields[]={
156 "keys",
157 "values",
158};
159PyTypeObject *ListComp_type;
160char *ListComp_fields[]={
161 "elt",
162 "generators",
163};
164PyTypeObject *GeneratorExp_type;
165char *GeneratorExp_fields[]={
166 "elt",
167 "generators",
168};
169PyTypeObject *Yield_type;
170char *Yield_fields[]={
171 "value",
172};
173PyTypeObject *Compare_type;
174char *Compare_fields[]={
175 "left",
176 "ops",
177 "comparators",
178};
179PyTypeObject *Call_type;
180char *Call_fields[]={
181 "func",
182 "args",
183 "keywords",
184 "starargs",
185 "kwargs",
186};
187PyTypeObject *Repr_type;
188char *Repr_fields[]={
189 "value",
190};
191PyTypeObject *Num_type;
192char *Num_fields[]={
193 "n",
194};
195PyTypeObject *Str_type;
196char *Str_fields[]={
197 "s",
198};
199PyTypeObject *Attribute_type;
200char *Attribute_fields[]={
201 "value",
202 "attr",
203 "ctx",
204};
205PyTypeObject *Subscript_type;
206char *Subscript_fields[]={
207 "value",
208 "slice",
209 "ctx",
210};
211PyTypeObject *Name_type;
212char *Name_fields[]={
213 "id",
214 "ctx",
215};
216PyTypeObject *List_type;
217char *List_fields[]={
218 "elts",
219 "ctx",
220};
221PyTypeObject *Tuple_type;
222char *Tuple_fields[]={
223 "elts",
224 "ctx",
225};
226PyTypeObject *expr_context_type;
227static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
228*AugLoad_singleton, *AugStore_singleton, *Param_singleton;
229static PyObject* ast2obj_expr_context(expr_context_ty);
230PyTypeObject *Load_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000231PyTypeObject *Store_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000232PyTypeObject *Del_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000233PyTypeObject *AugLoad_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000234PyTypeObject *AugStore_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000235PyTypeObject *Param_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000236PyTypeObject *slice_type;
237static PyObject* ast2obj_slice(void*);
238PyTypeObject *Ellipsis_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000239PyTypeObject *Slice_type;
240char *Slice_fields[]={
241 "lower",
242 "upper",
243 "step",
244};
245PyTypeObject *ExtSlice_type;
246char *ExtSlice_fields[]={
247 "dims",
248};
249PyTypeObject *Index_type;
250char *Index_fields[]={
251 "value",
252};
253PyTypeObject *boolop_type;
254static PyObject *And_singleton, *Or_singleton;
255static PyObject* ast2obj_boolop(boolop_ty);
256PyTypeObject *And_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000257PyTypeObject *Or_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000258PyTypeObject *operator_type;
259static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
260*Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton,
261*RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton,
262*FloorDiv_singleton;
263static PyObject* ast2obj_operator(operator_ty);
264PyTypeObject *Add_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000265PyTypeObject *Sub_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000266PyTypeObject *Mult_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000267PyTypeObject *Div_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000268PyTypeObject *Mod_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000269PyTypeObject *Pow_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000270PyTypeObject *LShift_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000271PyTypeObject *RShift_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000272PyTypeObject *BitOr_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000273PyTypeObject *BitXor_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000274PyTypeObject *BitAnd_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000275PyTypeObject *FloorDiv_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000276PyTypeObject *unaryop_type;
277static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
278*USub_singleton;
279static PyObject* ast2obj_unaryop(unaryop_ty);
280PyTypeObject *Invert_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000281PyTypeObject *Not_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000282PyTypeObject *UAdd_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000283PyTypeObject *USub_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000284PyTypeObject *cmpop_type;
285static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
286*Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
287*NotIn_singleton;
288static PyObject* ast2obj_cmpop(cmpop_ty);
289PyTypeObject *Eq_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000290PyTypeObject *NotEq_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000291PyTypeObject *Lt_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000292PyTypeObject *LtE_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000293PyTypeObject *Gt_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000294PyTypeObject *GtE_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000295PyTypeObject *Is_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000296PyTypeObject *IsNot_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000297PyTypeObject *In_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000298PyTypeObject *NotIn_type;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000299PyTypeObject *comprehension_type;
300static PyObject* ast2obj_comprehension(void*);
301char *comprehension_fields[]={
302 "target",
303 "iter",
304 "ifs",
305};
306PyTypeObject *excepthandler_type;
307static PyObject* ast2obj_excepthandler(void*);
308char *excepthandler_fields[]={
309 "type",
310 "name",
311 "body",
312};
313PyTypeObject *arguments_type;
314static PyObject* ast2obj_arguments(void*);
315char *arguments_fields[]={
316 "args",
317 "vararg",
318 "kwarg",
319 "defaults",
320};
321PyTypeObject *keyword_type;
322static PyObject* ast2obj_keyword(void*);
323char *keyword_fields[]={
324 "arg",
325 "value",
326};
327PyTypeObject *alias_type;
328static PyObject* ast2obj_alias(void*);
329char *alias_fields[]={
330 "name",
331 "asname",
332};
333
334
335static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
336{
337 PyObject *fnames, *result;
338 int i;
339 if (num_fields) {
340 fnames = PyTuple_New(num_fields);
341 if (!fnames) return NULL;
342 } else {
343 fnames = Py_None;
344 Py_INCREF(Py_None);
345 }
346 for(i=0; i < num_fields; i++) {
347 PyObject *field = PyString_FromString(fields[i]);
348 if (!field) {
349 Py_DECREF(fnames);
350 return NULL;
351 }
352 PyTuple_SET_ITEM(fnames, i, field);
353 }
354 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sO}", type, base, "_fields", fnames);
355 Py_DECREF(fnames);
356 return (PyTypeObject*)result;
357}
358
359static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
360{
361 int i, n = asdl_seq_LEN(seq);
362 PyObject *result = PyList_New(n);
363 PyObject *value;
364 if (!result)
365 return NULL;
366 for (i = 0; i < n; i++) {
367 value = func(asdl_seq_GET(seq, i));
368 if (!value) {
369 Py_DECREF(result);
370 return NULL;
371 }
372 PyList_SET_ITEM(result, i, value);
373 }
374 return result;
375}
376
377static PyObject* ast2obj_object(void *o)
378{
379 if (!o)
380 o = Py_None;
381 Py_INCREF((PyObject*)o);
382 return (PyObject*)o;
383}
384#define ast2obj_identifier ast2obj_object
385#define ast2obj_string ast2obj_object
386static PyObject* ast2obj_bool(bool b)
387{
388 return PyBool_FromLong(b);
389}
390
391static int initialized;
392static int init_types(void)
393{
394 if (initialized) return 1;
395 mod_type = make_type("mod", &PyBaseObject_Type, NULL, 0);
396 Module_type = make_type("Module", mod_type, Module_fields, 1);
397 Interactive_type = make_type("Interactive", mod_type,
398 Interactive_fields, 1);
399 Expression_type = make_type("Expression", mod_type, Expression_fields,
400 1);
401 Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
402 stmt_type = make_type("stmt", &PyBaseObject_Type, NULL, 0);
403 FunctionDef_type = make_type("FunctionDef", stmt_type,
404 FunctionDef_fields, 4);
405 ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 3);
406 Return_type = make_type("Return", stmt_type, Return_fields, 1);
407 Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
408 Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
409 AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
410 Print_type = make_type("Print", stmt_type, Print_fields, 3);
411 For_type = make_type("For", stmt_type, For_fields, 4);
412 While_type = make_type("While", stmt_type, While_fields, 3);
413 If_type = make_type("If", stmt_type, If_fields, 3);
414 Raise_type = make_type("Raise", stmt_type, Raise_fields, 3);
415 TryExcept_type = make_type("TryExcept", stmt_type, TryExcept_fields, 3);
416 TryFinally_type = make_type("TryFinally", stmt_type, TryFinally_fields,
417 2);
418 Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
419 Import_type = make_type("Import", stmt_type, Import_fields, 1);
420 ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields,
421 2);
422 Exec_type = make_type("Exec", stmt_type, Exec_fields, 3);
423 Global_type = make_type("Global", stmt_type, Global_fields, 1);
424 Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000425 Pass_type = make_type("Pass", stmt_type, NULL, 0);
426 Break_type = make_type("Break", stmt_type, NULL, 0);
427 Continue_type = make_type("Continue", stmt_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000428 expr_type = make_type("expr", &PyBaseObject_Type, NULL, 0);
429 BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
430 BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
431 UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
432 Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
433 Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
434 ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
435 GeneratorExp_type = make_type("GeneratorExp", expr_type,
436 GeneratorExp_fields, 2);
437 Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
438 Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
439 Call_type = make_type("Call", expr_type, Call_fields, 5);
440 Repr_type = make_type("Repr", expr_type, Repr_fields, 1);
441 Num_type = make_type("Num", expr_type, Num_fields, 1);
442 Str_type = make_type("Str", expr_type, Str_fields, 1);
443 Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
444 Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
445 Name_type = make_type("Name", expr_type, Name_fields, 2);
446 List_type = make_type("List", expr_type, List_fields, 2);
447 Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
448 expr_context_type = make_type("expr_context", &PyBaseObject_Type, NULL,
449 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000450 Load_type = make_type("Load", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000451 Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000452 Store_type = make_type("Store", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000453 Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000454 Del_type = make_type("Del", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000455 Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000456 AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000457 AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000458 AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000459 AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000460 Param_type = make_type("Param", expr_context_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000461 Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
462 slice_type = make_type("slice", &PyBaseObject_Type, NULL, 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000463 Ellipsis_type = make_type("Ellipsis", slice_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000464 Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
465 ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
466 Index_type = make_type("Index", slice_type, Index_fields, 1);
467 boolop_type = make_type("boolop", &PyBaseObject_Type, NULL, 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000468 And_type = make_type("And", boolop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000469 And_singleton = PyType_GenericNew(And_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000470 Or_type = make_type("Or", boolop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000471 Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
472 operator_type = make_type("operator", &PyBaseObject_Type, NULL, 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000473 Add_type = make_type("Add", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000474 Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000475 Sub_type = make_type("Sub", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000476 Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000477 Mult_type = make_type("Mult", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000478 Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000479 Div_type = make_type("Div", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000480 Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000481 Mod_type = make_type("Mod", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000482 Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000483 Pow_type = make_type("Pow", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000484 Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000485 LShift_type = make_type("LShift", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000486 LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000487 RShift_type = make_type("RShift", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000488 RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000489 BitOr_type = make_type("BitOr", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000490 BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000491 BitXor_type = make_type("BitXor", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000492 BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000493 BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000494 BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000495 FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000496 FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
497 unaryop_type = make_type("unaryop", &PyBaseObject_Type, NULL, 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000498 Invert_type = make_type("Invert", unaryop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000499 Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000500 Not_type = make_type("Not", unaryop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000501 Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000502 UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000503 UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000504 USub_type = make_type("USub", unaryop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000505 USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
506 cmpop_type = make_type("cmpop", &PyBaseObject_Type, NULL, 0);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000507 Eq_type = make_type("Eq", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000508 Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000509 NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000510 NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000511 Lt_type = make_type("Lt", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000512 Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000513 LtE_type = make_type("LtE", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000514 LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000515 Gt_type = make_type("Gt", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000516 Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000517 GtE_type = make_type("GtE", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000518 GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000519 Is_type = make_type("Is", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000520 Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000521 IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000522 IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000523 In_type = make_type("In", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000524 In_singleton = PyType_GenericNew(In_type, NULL, NULL);
Martin v. Löwis8d0701d2006-02-26 23:40:20 +0000525 NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000526 NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
527 comprehension_type = make_type("comprehension", &PyBaseObject_Type,
528 comprehension_fields, 3);
529 excepthandler_type = make_type("excepthandler", &PyBaseObject_Type,
530 excepthandler_fields, 3);
531 arguments_type = make_type("arguments", &PyBaseObject_Type,
532 arguments_fields, 4);
533 keyword_type = make_type("keyword", &PyBaseObject_Type, keyword_fields,
534 2);
535 alias_type = make_type("alias", &PyBaseObject_Type, alias_fields, 2);
536return 1;
537}
Neal Norwitz7b5a6042005-11-13 19:14:20 +0000538
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000539mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000540Module(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000541{
542 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000543 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000544 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000545 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000546 return NULL;
547 }
548 p->kind = Module_kind;
549 p->v.Module.body = body;
550 return p;
551}
552
553mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000554Interactive(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000555{
556 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000557 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000558 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000559 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000560 return NULL;
561 }
562 p->kind = Interactive_kind;
563 p->v.Interactive.body = body;
564 return p;
565}
566
567mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000568Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000569{
570 mod_ty p;
571 if (!body) {
572 PyErr_SetString(PyExc_ValueError,
573 "field body is required for Expression");
574 return NULL;
575 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000576 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000577 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000578 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000579 return NULL;
580 }
581 p->kind = Expression_kind;
582 p->v.Expression.body = body;
583 return p;
584}
585
586mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000587Suite(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000588{
589 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000590 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000591 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000592 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000593 return NULL;
594 }
595 p->kind = Suite_kind;
596 p->v.Suite.body = body;
597 return p;
598}
599
600stmt_ty
601FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000602 decorators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000603{
604 stmt_ty p;
605 if (!name) {
606 PyErr_SetString(PyExc_ValueError,
607 "field name is required for FunctionDef");
608 return NULL;
609 }
610 if (!args) {
611 PyErr_SetString(PyExc_ValueError,
612 "field args is required for FunctionDef");
613 return NULL;
614 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000615 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000616 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000617 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000618 return NULL;
619 }
620 p->kind = FunctionDef_kind;
621 p->v.FunctionDef.name = name;
622 p->v.FunctionDef.args = args;
623 p->v.FunctionDef.body = body;
624 p->v.FunctionDef.decorators = decorators;
625 p->lineno = lineno;
626 return p;
627}
628
629stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000630ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno,
631 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000632{
633 stmt_ty p;
634 if (!name) {
635 PyErr_SetString(PyExc_ValueError,
636 "field name is required for ClassDef");
637 return NULL;
638 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000639 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000640 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000641 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000642 return NULL;
643 }
644 p->kind = ClassDef_kind;
645 p->v.ClassDef.name = name;
646 p->v.ClassDef.bases = bases;
647 p->v.ClassDef.body = body;
648 p->lineno = lineno;
649 return p;
650}
651
652stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000653Return(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000654{
655 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000656 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000657 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000658 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000659 return NULL;
660 }
661 p->kind = Return_kind;
662 p->v.Return.value = value;
663 p->lineno = lineno;
664 return p;
665}
666
667stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000668Delete(asdl_seq * targets, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000669{
670 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000671 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000672 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000673 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000674 return NULL;
675 }
676 p->kind = Delete_kind;
677 p->v.Delete.targets = targets;
678 p->lineno = lineno;
679 return p;
680}
681
682stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000683Assign(asdl_seq * targets, expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000684{
685 stmt_ty p;
686 if (!value) {
687 PyErr_SetString(PyExc_ValueError,
688 "field value is required for Assign");
689 return NULL;
690 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000691 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000692 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000693 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000694 return NULL;
695 }
696 p->kind = Assign_kind;
697 p->v.Assign.targets = targets;
698 p->v.Assign.value = value;
699 p->lineno = lineno;
700 return p;
701}
702
703stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000704AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, PyArena
705 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000706{
707 stmt_ty p;
708 if (!target) {
709 PyErr_SetString(PyExc_ValueError,
710 "field target is required for AugAssign");
711 return NULL;
712 }
713 if (!op) {
714 PyErr_SetString(PyExc_ValueError,
715 "field op is required for AugAssign");
716 return NULL;
717 }
718 if (!value) {
719 PyErr_SetString(PyExc_ValueError,
720 "field value is required for AugAssign");
721 return NULL;
722 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000723 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000724 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000725 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000726 return NULL;
727 }
728 p->kind = AugAssign_kind;
729 p->v.AugAssign.target = target;
730 p->v.AugAssign.op = op;
731 p->v.AugAssign.value = value;
732 p->lineno = lineno;
733 return p;
734}
735
736stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000737Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000738{
739 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000740 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000741 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000742 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000743 return NULL;
744 }
745 p->kind = Print_kind;
746 p->v.Print.dest = dest;
747 p->v.Print.values = values;
748 p->v.Print.nl = nl;
749 p->lineno = lineno;
750 return p;
751}
752
753stmt_ty
754For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000755 lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000756{
757 stmt_ty p;
758 if (!target) {
759 PyErr_SetString(PyExc_ValueError,
760 "field target is required for For");
761 return NULL;
762 }
763 if (!iter) {
764 PyErr_SetString(PyExc_ValueError,
765 "field iter is required for For");
766 return NULL;
767 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000768 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000769 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000770 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000771 return NULL;
772 }
773 p->kind = For_kind;
774 p->v.For.target = target;
775 p->v.For.iter = iter;
776 p->v.For.body = body;
777 p->v.For.orelse = orelse;
778 p->lineno = lineno;
779 return p;
780}
781
782stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000783While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena
784 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000785{
786 stmt_ty p;
787 if (!test) {
788 PyErr_SetString(PyExc_ValueError,
789 "field test is required for While");
790 return NULL;
791 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000792 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000793 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000794 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000795 return NULL;
796 }
797 p->kind = While_kind;
798 p->v.While.test = test;
799 p->v.While.body = body;
800 p->v.While.orelse = orelse;
801 p->lineno = lineno;
802 return p;
803}
804
805stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000806If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000807{
808 stmt_ty p;
809 if (!test) {
810 PyErr_SetString(PyExc_ValueError,
811 "field test is required for If");
812 return NULL;
813 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000814 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000815 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000816 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000817 return NULL;
818 }
819 p->kind = If_kind;
820 p->v.If.test = test;
821 p->v.If.body = body;
822 p->v.If.orelse = orelse;
823 p->lineno = lineno;
824 return p;
825}
826
827stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000828Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000829{
830 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000831 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000832 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000833 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000834 return NULL;
835 }
836 p->kind = Raise_kind;
837 p->v.Raise.type = type;
838 p->v.Raise.inst = inst;
839 p->v.Raise.tback = tback;
840 p->lineno = lineno;
841 return p;
842}
843
844stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000845TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno,
846 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000847{
848 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000849 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000850 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000851 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000852 return NULL;
853 }
854 p->kind = TryExcept_kind;
855 p->v.TryExcept.body = body;
856 p->v.TryExcept.handlers = handlers;
857 p->v.TryExcept.orelse = orelse;
858 p->lineno = lineno;
859 return p;
860}
861
862stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000863TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000864{
865 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000866 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000867 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000868 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000869 return NULL;
870 }
871 p->kind = TryFinally_kind;
872 p->v.TryFinally.body = body;
873 p->v.TryFinally.finalbody = finalbody;
874 p->lineno = lineno;
875 return p;
876}
877
878stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000879Assert(expr_ty test, expr_ty msg, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000880{
881 stmt_ty p;
882 if (!test) {
883 PyErr_SetString(PyExc_ValueError,
884 "field test is required for Assert");
885 return NULL;
886 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000887 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000888 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000889 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000890 return NULL;
891 }
892 p->kind = Assert_kind;
893 p->v.Assert.test = test;
894 p->v.Assert.msg = msg;
895 p->lineno = lineno;
896 return p;
897}
898
899stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000900Import(asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000901{
902 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000903 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000904 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000905 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000906 return NULL;
907 }
908 p->kind = Import_kind;
909 p->v.Import.names = names;
910 p->lineno = lineno;
911 return p;
912}
913
914stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000915ImportFrom(identifier module, asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000916{
917 stmt_ty p;
918 if (!module) {
919 PyErr_SetString(PyExc_ValueError,
920 "field module is required for ImportFrom");
921 return NULL;
922 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000923 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000924 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000925 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000926 return NULL;
927 }
928 p->kind = ImportFrom_kind;
929 p->v.ImportFrom.module = module;
930 p->v.ImportFrom.names = names;
931 p->lineno = lineno;
932 return p;
933}
934
935stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000936Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000937{
938 stmt_ty p;
939 if (!body) {
940 PyErr_SetString(PyExc_ValueError,
941 "field body is required for Exec");
942 return NULL;
943 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000944 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000945 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000946 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000947 return NULL;
948 }
949 p->kind = Exec_kind;
950 p->v.Exec.body = body;
951 p->v.Exec.globals = globals;
952 p->v.Exec.locals = locals;
953 p->lineno = lineno;
954 return p;
955}
956
957stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000958Global(asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000959{
960 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000961 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000962 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000963 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000964 return NULL;
965 }
966 p->kind = Global_kind;
967 p->v.Global.names = names;
968 p->lineno = lineno;
969 return p;
970}
971
972stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000973Expr(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000974{
975 stmt_ty p;
976 if (!value) {
977 PyErr_SetString(PyExc_ValueError,
978 "field value is required for Expr");
979 return NULL;
980 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000981 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000982 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000983 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000984 return NULL;
985 }
986 p->kind = Expr_kind;
987 p->v.Expr.value = value;
988 p->lineno = lineno;
989 return p;
990}
991
992stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000993Pass(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000994{
995 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000996 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000997 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000998 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000999 return NULL;
1000 }
1001 p->kind = Pass_kind;
1002 p->lineno = lineno;
1003 return p;
1004}
1005
1006stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001007Break(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001008{
1009 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001010 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001011 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001012 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001013 return NULL;
1014 }
1015 p->kind = Break_kind;
1016 p->lineno = lineno;
1017 return p;
1018}
1019
1020stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001021Continue(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001022{
1023 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001024 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001025 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001026 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001027 return NULL;
1028 }
1029 p->kind = Continue_kind;
1030 p->lineno = lineno;
1031 return p;
1032}
1033
1034expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001035BoolOp(boolop_ty op, asdl_seq * values, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001036{
1037 expr_ty p;
1038 if (!op) {
1039 PyErr_SetString(PyExc_ValueError,
1040 "field op is required for BoolOp");
1041 return NULL;
1042 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001043 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001044 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001045 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001046 return NULL;
1047 }
1048 p->kind = BoolOp_kind;
1049 p->v.BoolOp.op = op;
1050 p->v.BoolOp.values = values;
1051 p->lineno = lineno;
1052 return p;
1053}
1054
1055expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001056BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001057{
1058 expr_ty p;
1059 if (!left) {
1060 PyErr_SetString(PyExc_ValueError,
1061 "field left is required for BinOp");
1062 return NULL;
1063 }
1064 if (!op) {
1065 PyErr_SetString(PyExc_ValueError,
1066 "field op is required for BinOp");
1067 return NULL;
1068 }
1069 if (!right) {
1070 PyErr_SetString(PyExc_ValueError,
1071 "field right is required for BinOp");
1072 return NULL;
1073 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001074 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001075 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001076 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001077 return NULL;
1078 }
1079 p->kind = BinOp_kind;
1080 p->v.BinOp.left = left;
1081 p->v.BinOp.op = op;
1082 p->v.BinOp.right = right;
1083 p->lineno = lineno;
1084 return p;
1085}
1086
1087expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001088UnaryOp(unaryop_ty op, expr_ty operand, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001089{
1090 expr_ty p;
1091 if (!op) {
1092 PyErr_SetString(PyExc_ValueError,
1093 "field op is required for UnaryOp");
1094 return NULL;
1095 }
1096 if (!operand) {
1097 PyErr_SetString(PyExc_ValueError,
1098 "field operand is required for UnaryOp");
1099 return NULL;
1100 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001101 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001102 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001103 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001104 return NULL;
1105 }
1106 p->kind = UnaryOp_kind;
1107 p->v.UnaryOp.op = op;
1108 p->v.UnaryOp.operand = operand;
1109 p->lineno = lineno;
1110 return p;
1111}
1112
1113expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001114Lambda(arguments_ty args, expr_ty body, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001115{
1116 expr_ty p;
1117 if (!args) {
1118 PyErr_SetString(PyExc_ValueError,
1119 "field args is required for Lambda");
1120 return NULL;
1121 }
1122 if (!body) {
1123 PyErr_SetString(PyExc_ValueError,
1124 "field body is required for Lambda");
1125 return NULL;
1126 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001127 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001128 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001129 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001130 return NULL;
1131 }
1132 p->kind = Lambda_kind;
1133 p->v.Lambda.args = args;
1134 p->v.Lambda.body = body;
1135 p->lineno = lineno;
1136 return p;
1137}
1138
1139expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001140Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001141{
1142 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001143 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001144 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001145 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001146 return NULL;
1147 }
1148 p->kind = Dict_kind;
1149 p->v.Dict.keys = keys;
1150 p->v.Dict.values = values;
1151 p->lineno = lineno;
1152 return p;
1153}
1154
1155expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001156ListComp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001157{
1158 expr_ty p;
1159 if (!elt) {
1160 PyErr_SetString(PyExc_ValueError,
1161 "field elt is required for ListComp");
1162 return NULL;
1163 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001164 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001165 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001166 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001167 return NULL;
1168 }
1169 p->kind = ListComp_kind;
1170 p->v.ListComp.elt = elt;
1171 p->v.ListComp.generators = generators;
1172 p->lineno = lineno;
1173 return p;
1174}
1175
1176expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001177GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001178{
1179 expr_ty p;
1180 if (!elt) {
1181 PyErr_SetString(PyExc_ValueError,
1182 "field elt is required for GeneratorExp");
1183 return NULL;
1184 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001185 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001186 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001187 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001188 return NULL;
1189 }
1190 p->kind = GeneratorExp_kind;
1191 p->v.GeneratorExp.elt = elt;
1192 p->v.GeneratorExp.generators = generators;
1193 p->lineno = lineno;
1194 return p;
1195}
1196
1197expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001198Yield(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001199{
1200 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001201 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001202 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001203 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001204 return NULL;
1205 }
1206 p->kind = Yield_kind;
1207 p->v.Yield.value = value;
1208 p->lineno = lineno;
1209 return p;
1210}
1211
1212expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001213Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int lineno,
1214 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001215{
1216 expr_ty p;
1217 if (!left) {
1218 PyErr_SetString(PyExc_ValueError,
1219 "field left is required for Compare");
1220 return NULL;
1221 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001222 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001223 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001224 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001225 return NULL;
1226 }
1227 p->kind = Compare_kind;
1228 p->v.Compare.left = left;
1229 p->v.Compare.ops = ops;
1230 p->v.Compare.comparators = comparators;
1231 p->lineno = lineno;
1232 return p;
1233}
1234
1235expr_ty
1236Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001237 expr_ty kwargs, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001238{
1239 expr_ty p;
1240 if (!func) {
1241 PyErr_SetString(PyExc_ValueError,
1242 "field func is required for Call");
1243 return NULL;
1244 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001245 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001246 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001247 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001248 return NULL;
1249 }
1250 p->kind = Call_kind;
1251 p->v.Call.func = func;
1252 p->v.Call.args = args;
1253 p->v.Call.keywords = keywords;
1254 p->v.Call.starargs = starargs;
1255 p->v.Call.kwargs = kwargs;
1256 p->lineno = lineno;
1257 return p;
1258}
1259
1260expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001261Repr(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001262{
1263 expr_ty p;
1264 if (!value) {
1265 PyErr_SetString(PyExc_ValueError,
1266 "field value is required for Repr");
1267 return NULL;
1268 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001269 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001270 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001271 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001272 return NULL;
1273 }
1274 p->kind = Repr_kind;
1275 p->v.Repr.value = value;
1276 p->lineno = lineno;
1277 return p;
1278}
1279
1280expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001281Num(object n, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001282{
1283 expr_ty p;
1284 if (!n) {
1285 PyErr_SetString(PyExc_ValueError,
1286 "field n is required for Num");
1287 return NULL;
1288 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001289 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001290 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001291 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001292 return NULL;
1293 }
1294 p->kind = Num_kind;
1295 p->v.Num.n = n;
1296 p->lineno = lineno;
1297 return p;
1298}
1299
1300expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001301Str(string s, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001302{
1303 expr_ty p;
1304 if (!s) {
1305 PyErr_SetString(PyExc_ValueError,
1306 "field s is required for Str");
1307 return NULL;
1308 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001309 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001310 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001311 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001312 return NULL;
1313 }
1314 p->kind = Str_kind;
1315 p->v.Str.s = s;
1316 p->lineno = lineno;
1317 return p;
1318}
1319
1320expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001321Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno,
1322 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001323{
1324 expr_ty p;
1325 if (!value) {
1326 PyErr_SetString(PyExc_ValueError,
1327 "field value is required for Attribute");
1328 return NULL;
1329 }
1330 if (!attr) {
1331 PyErr_SetString(PyExc_ValueError,
1332 "field attr is required for Attribute");
1333 return NULL;
1334 }
1335 if (!ctx) {
1336 PyErr_SetString(PyExc_ValueError,
1337 "field ctx is required for Attribute");
1338 return NULL;
1339 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001340 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001341 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001342 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001343 return NULL;
1344 }
1345 p->kind = Attribute_kind;
1346 p->v.Attribute.value = value;
1347 p->v.Attribute.attr = attr;
1348 p->v.Attribute.ctx = ctx;
1349 p->lineno = lineno;
1350 return p;
1351}
1352
1353expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001354Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno,
1355 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001356{
1357 expr_ty p;
1358 if (!value) {
1359 PyErr_SetString(PyExc_ValueError,
1360 "field value is required for Subscript");
1361 return NULL;
1362 }
1363 if (!slice) {
1364 PyErr_SetString(PyExc_ValueError,
1365 "field slice is required for Subscript");
1366 return NULL;
1367 }
1368 if (!ctx) {
1369 PyErr_SetString(PyExc_ValueError,
1370 "field ctx is required for Subscript");
1371 return NULL;
1372 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001373 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001374 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001375 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001376 return NULL;
1377 }
1378 p->kind = Subscript_kind;
1379 p->v.Subscript.value = value;
1380 p->v.Subscript.slice = slice;
1381 p->v.Subscript.ctx = ctx;
1382 p->lineno = lineno;
1383 return p;
1384}
1385
1386expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001387Name(identifier id, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001388{
1389 expr_ty p;
1390 if (!id) {
1391 PyErr_SetString(PyExc_ValueError,
1392 "field id is required for Name");
1393 return NULL;
1394 }
1395 if (!ctx) {
1396 PyErr_SetString(PyExc_ValueError,
1397 "field ctx is required for Name");
1398 return NULL;
1399 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001400 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001401 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001402 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001403 return NULL;
1404 }
1405 p->kind = Name_kind;
1406 p->v.Name.id = id;
1407 p->v.Name.ctx = ctx;
1408 p->lineno = lineno;
1409 return p;
1410}
1411
1412expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001413List(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001414{
1415 expr_ty p;
1416 if (!ctx) {
1417 PyErr_SetString(PyExc_ValueError,
1418 "field ctx is required for List");
1419 return NULL;
1420 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001421 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001422 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001423 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001424 return NULL;
1425 }
1426 p->kind = List_kind;
1427 p->v.List.elts = elts;
1428 p->v.List.ctx = ctx;
1429 p->lineno = lineno;
1430 return p;
1431}
1432
1433expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001434Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001435{
1436 expr_ty p;
1437 if (!ctx) {
1438 PyErr_SetString(PyExc_ValueError,
1439 "field ctx is required for Tuple");
1440 return NULL;
1441 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001442 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001443 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001444 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001445 return NULL;
1446 }
1447 p->kind = Tuple_kind;
1448 p->v.Tuple.elts = elts;
1449 p->v.Tuple.ctx = ctx;
1450 p->lineno = lineno;
1451 return p;
1452}
1453
1454slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001455Ellipsis(PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001456{
1457 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001458 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001459 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001460 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001461 return NULL;
1462 }
1463 p->kind = Ellipsis_kind;
1464 return p;
1465}
1466
1467slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001468Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001469{
1470 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001471 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001472 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001473 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001474 return NULL;
1475 }
1476 p->kind = Slice_kind;
1477 p->v.Slice.lower = lower;
1478 p->v.Slice.upper = upper;
1479 p->v.Slice.step = step;
1480 return p;
1481}
1482
1483slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001484ExtSlice(asdl_seq * dims, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001485{
1486 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001487 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001488 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001489 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001490 return NULL;
1491 }
1492 p->kind = ExtSlice_kind;
1493 p->v.ExtSlice.dims = dims;
1494 return p;
1495}
1496
1497slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001498Index(expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001499{
1500 slice_ty p;
1501 if (!value) {
1502 PyErr_SetString(PyExc_ValueError,
1503 "field value is required for Index");
1504 return NULL;
1505 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001506 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001507 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001508 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001509 return NULL;
1510 }
1511 p->kind = Index_kind;
1512 p->v.Index.value = value;
1513 return p;
1514}
1515
1516comprehension_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001517comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001518{
1519 comprehension_ty p;
1520 if (!target) {
1521 PyErr_SetString(PyExc_ValueError,
1522 "field target is required for comprehension");
1523 return NULL;
1524 }
1525 if (!iter) {
1526 PyErr_SetString(PyExc_ValueError,
1527 "field iter is required for comprehension");
1528 return NULL;
1529 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001530 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001531 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001532 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001533 return NULL;
1534 }
1535 p->target = target;
1536 p->iter = iter;
1537 p->ifs = ifs;
1538 return p;
1539}
1540
1541excepthandler_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001542excepthandler(expr_ty type, expr_ty name, asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001543{
1544 excepthandler_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001545 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001546 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001547 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001548 return NULL;
1549 }
1550 p->type = type;
1551 p->name = name;
1552 p->body = body;
1553 return p;
1554}
1555
1556arguments_ty
1557arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001558 defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001559{
1560 arguments_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001561 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001562 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001563 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001564 return NULL;
1565 }
1566 p->args = args;
1567 p->vararg = vararg;
1568 p->kwarg = kwarg;
1569 p->defaults = defaults;
1570 return p;
1571}
1572
1573keyword_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001574keyword(identifier arg, expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001575{
1576 keyword_ty p;
1577 if (!arg) {
1578 PyErr_SetString(PyExc_ValueError,
1579 "field arg is required for keyword");
1580 return NULL;
1581 }
1582 if (!value) {
1583 PyErr_SetString(PyExc_ValueError,
1584 "field value is required for keyword");
1585 return NULL;
1586 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001587 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001588 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001589 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001590 return NULL;
1591 }
1592 p->arg = arg;
1593 p->value = value;
1594 return p;
1595}
1596
1597alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001598alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001599{
1600 alias_ty p;
1601 if (!name) {
1602 PyErr_SetString(PyExc_ValueError,
1603 "field name is required for alias");
1604 return NULL;
1605 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001606 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001607 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001608 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001609 return NULL;
1610 }
1611 p->name = name;
1612 p->asname = asname;
1613 return p;
1614}
1615
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001616
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001617PyObject*
1618ast2obj_mod(void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001619{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001620 mod_ty o = (mod_ty)_o;
1621 PyObject *result = NULL, *value = NULL;
1622 if (!o) {
1623 Py_INCREF(Py_None);
1624 return Py_None;
1625 }
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001626
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001627 switch (o->kind) {
1628 case Module_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001629 result = PyType_GenericNew(Module_type, NULL, NULL);
1630 if (!result) goto failed;
1631 value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
1632 if (!value) goto failed;
1633 if (PyObject_SetAttrString(result, "body", value) == -1)
1634 goto failed;
1635 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001636 break;
1637 case Interactive_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001638 result = PyType_GenericNew(Interactive_type, NULL, NULL);
1639 if (!result) goto failed;
1640 value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
1641 if (!value) goto failed;
1642 if (PyObject_SetAttrString(result, "body", value) == -1)
1643 goto failed;
1644 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001645 break;
1646 case Expression_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001647 result = PyType_GenericNew(Expression_type, NULL, NULL);
1648 if (!result) goto failed;
1649 value = ast2obj_expr(o->v.Expression.body);
1650 if (!value) goto failed;
1651 if (PyObject_SetAttrString(result, "body", value) == -1)
1652 goto failed;
1653 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001654 break;
1655 case Suite_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001656 result = PyType_GenericNew(Suite_type, NULL, NULL);
1657 if (!result) goto failed;
1658 value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
1659 if (!value) goto failed;
1660 if (PyObject_SetAttrString(result, "body", value) == -1)
1661 goto failed;
1662 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001663 break;
1664 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001665
1666 return result;
1667failed:
1668 Py_XDECREF(value);
1669 Py_XDECREF(result);
1670 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001671}
1672
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001673PyObject*
1674ast2obj_stmt(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001675{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001676 stmt_ty o = (stmt_ty)_o;
1677 PyObject *result = NULL, *value = NULL;
1678 if (!o) {
1679 Py_INCREF(Py_None);
1680 return Py_None;
1681 }
1682
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001683 switch (o->kind) {
1684 case FunctionDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001685 result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
1686 if (!result) goto failed;
1687 value = ast2obj_identifier(o->v.FunctionDef.name);
1688 if (!value) goto failed;
1689 if (PyObject_SetAttrString(result, "name", value) == -1)
1690 goto failed;
1691 Py_DECREF(value);
1692 value = ast2obj_arguments(o->v.FunctionDef.args);
1693 if (!value) goto failed;
1694 if (PyObject_SetAttrString(result, "args", value) == -1)
1695 goto failed;
1696 Py_DECREF(value);
1697 value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
1698 if (!value) goto failed;
1699 if (PyObject_SetAttrString(result, "body", value) == -1)
1700 goto failed;
1701 Py_DECREF(value);
1702 value = ast2obj_list(o->v.FunctionDef.decorators, ast2obj_expr);
1703 if (!value) goto failed;
1704 if (PyObject_SetAttrString(result, "decorators", value) == -1)
1705 goto failed;
1706 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001707 break;
1708 case ClassDef_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001709 result = PyType_GenericNew(ClassDef_type, NULL, NULL);
1710 if (!result) goto failed;
1711 value = ast2obj_identifier(o->v.ClassDef.name);
1712 if (!value) goto failed;
1713 if (PyObject_SetAttrString(result, "name", value) == -1)
1714 goto failed;
1715 Py_DECREF(value);
1716 value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
1717 if (!value) goto failed;
1718 if (PyObject_SetAttrString(result, "bases", value) == -1)
1719 goto failed;
1720 Py_DECREF(value);
1721 value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
1722 if (!value) goto failed;
1723 if (PyObject_SetAttrString(result, "body", value) == -1)
1724 goto failed;
1725 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001726 break;
1727 case Return_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001728 result = PyType_GenericNew(Return_type, NULL, NULL);
1729 if (!result) goto failed;
1730 value = ast2obj_expr(o->v.Return.value);
1731 if (!value) goto failed;
1732 if (PyObject_SetAttrString(result, "value", value) == -1)
1733 goto failed;
1734 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001735 break;
1736 case Delete_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001737 result = PyType_GenericNew(Delete_type, NULL, NULL);
1738 if (!result) goto failed;
1739 value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
1740 if (!value) goto failed;
1741 if (PyObject_SetAttrString(result, "targets", value) == -1)
1742 goto failed;
1743 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001744 break;
1745 case Assign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001746 result = PyType_GenericNew(Assign_type, NULL, NULL);
1747 if (!result) goto failed;
1748 value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
1749 if (!value) goto failed;
1750 if (PyObject_SetAttrString(result, "targets", value) == -1)
1751 goto failed;
1752 Py_DECREF(value);
1753 value = ast2obj_expr(o->v.Assign.value);
1754 if (!value) goto failed;
1755 if (PyObject_SetAttrString(result, "value", value) == -1)
1756 goto failed;
1757 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001758 break;
1759 case AugAssign_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001760 result = PyType_GenericNew(AugAssign_type, NULL, NULL);
1761 if (!result) goto failed;
1762 value = ast2obj_expr(o->v.AugAssign.target);
1763 if (!value) goto failed;
1764 if (PyObject_SetAttrString(result, "target", value) == -1)
1765 goto failed;
1766 Py_DECREF(value);
1767 value = ast2obj_operator(o->v.AugAssign.op);
1768 if (!value) goto failed;
1769 if (PyObject_SetAttrString(result, "op", value) == -1)
1770 goto failed;
1771 Py_DECREF(value);
1772 value = ast2obj_expr(o->v.AugAssign.value);
1773 if (!value) goto failed;
1774 if (PyObject_SetAttrString(result, "value", value) == -1)
1775 goto failed;
1776 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001777 break;
1778 case Print_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001779 result = PyType_GenericNew(Print_type, NULL, NULL);
1780 if (!result) goto failed;
1781 value = ast2obj_expr(o->v.Print.dest);
1782 if (!value) goto failed;
1783 if (PyObject_SetAttrString(result, "dest", value) == -1)
1784 goto failed;
1785 Py_DECREF(value);
1786 value = ast2obj_list(o->v.Print.values, ast2obj_expr);
1787 if (!value) goto failed;
1788 if (PyObject_SetAttrString(result, "values", value) == -1)
1789 goto failed;
1790 Py_DECREF(value);
1791 value = ast2obj_bool(o->v.Print.nl);
1792 if (!value) goto failed;
1793 if (PyObject_SetAttrString(result, "nl", value) == -1)
1794 goto failed;
1795 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001796 break;
1797 case For_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001798 result = PyType_GenericNew(For_type, NULL, NULL);
1799 if (!result) goto failed;
1800 value = ast2obj_expr(o->v.For.target);
1801 if (!value) goto failed;
1802 if (PyObject_SetAttrString(result, "target", value) == -1)
1803 goto failed;
1804 Py_DECREF(value);
1805 value = ast2obj_expr(o->v.For.iter);
1806 if (!value) goto failed;
1807 if (PyObject_SetAttrString(result, "iter", value) == -1)
1808 goto failed;
1809 Py_DECREF(value);
1810 value = ast2obj_list(o->v.For.body, ast2obj_stmt);
1811 if (!value) goto failed;
1812 if (PyObject_SetAttrString(result, "body", value) == -1)
1813 goto failed;
1814 Py_DECREF(value);
1815 value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
1816 if (!value) goto failed;
1817 if (PyObject_SetAttrString(result, "orelse", value) == -1)
1818 goto failed;
1819 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001820 break;
1821 case While_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001822 result = PyType_GenericNew(While_type, NULL, NULL);
1823 if (!result) goto failed;
1824 value = ast2obj_expr(o->v.While.test);
1825 if (!value) goto failed;
1826 if (PyObject_SetAttrString(result, "test", value) == -1)
1827 goto failed;
1828 Py_DECREF(value);
1829 value = ast2obj_list(o->v.While.body, ast2obj_stmt);
1830 if (!value) goto failed;
1831 if (PyObject_SetAttrString(result, "body", value) == -1)
1832 goto failed;
1833 Py_DECREF(value);
1834 value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
1835 if (!value) goto failed;
1836 if (PyObject_SetAttrString(result, "orelse", value) == -1)
1837 goto failed;
1838 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001839 break;
1840 case If_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001841 result = PyType_GenericNew(If_type, NULL, NULL);
1842 if (!result) goto failed;
1843 value = ast2obj_expr(o->v.If.test);
1844 if (!value) goto failed;
1845 if (PyObject_SetAttrString(result, "test", value) == -1)
1846 goto failed;
1847 Py_DECREF(value);
1848 value = ast2obj_list(o->v.If.body, ast2obj_stmt);
1849 if (!value) goto failed;
1850 if (PyObject_SetAttrString(result, "body", value) == -1)
1851 goto failed;
1852 Py_DECREF(value);
1853 value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
1854 if (!value) goto failed;
1855 if (PyObject_SetAttrString(result, "orelse", value) == -1)
1856 goto failed;
1857 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001858 break;
1859 case Raise_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001860 result = PyType_GenericNew(Raise_type, NULL, NULL);
1861 if (!result) goto failed;
1862 value = ast2obj_expr(o->v.Raise.type);
1863 if (!value) goto failed;
1864 if (PyObject_SetAttrString(result, "type", value) == -1)
1865 goto failed;
1866 Py_DECREF(value);
1867 value = ast2obj_expr(o->v.Raise.inst);
1868 if (!value) goto failed;
1869 if (PyObject_SetAttrString(result, "inst", value) == -1)
1870 goto failed;
1871 Py_DECREF(value);
1872 value = ast2obj_expr(o->v.Raise.tback);
1873 if (!value) goto failed;
1874 if (PyObject_SetAttrString(result, "tback", value) == -1)
1875 goto failed;
1876 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001877 break;
1878 case TryExcept_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001879 result = PyType_GenericNew(TryExcept_type, NULL, NULL);
1880 if (!result) goto failed;
1881 value = ast2obj_list(o->v.TryExcept.body, ast2obj_stmt);
1882 if (!value) goto failed;
1883 if (PyObject_SetAttrString(result, "body", value) == -1)
1884 goto failed;
1885 Py_DECREF(value);
1886 value = ast2obj_list(o->v.TryExcept.handlers,
1887 ast2obj_excepthandler);
1888 if (!value) goto failed;
1889 if (PyObject_SetAttrString(result, "handlers", value) == -1)
1890 goto failed;
1891 Py_DECREF(value);
1892 value = ast2obj_list(o->v.TryExcept.orelse, ast2obj_stmt);
1893 if (!value) goto failed;
1894 if (PyObject_SetAttrString(result, "orelse", value) == -1)
1895 goto failed;
1896 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001897 break;
1898 case TryFinally_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001899 result = PyType_GenericNew(TryFinally_type, NULL, NULL);
1900 if (!result) goto failed;
1901 value = ast2obj_list(o->v.TryFinally.body, ast2obj_stmt);
1902 if (!value) goto failed;
1903 if (PyObject_SetAttrString(result, "body", value) == -1)
1904 goto failed;
1905 Py_DECREF(value);
1906 value = ast2obj_list(o->v.TryFinally.finalbody, ast2obj_stmt);
1907 if (!value) goto failed;
1908 if (PyObject_SetAttrString(result, "finalbody", value) == -1)
1909 goto failed;
1910 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001911 break;
1912 case Assert_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001913 result = PyType_GenericNew(Assert_type, NULL, NULL);
1914 if (!result) goto failed;
1915 value = ast2obj_expr(o->v.Assert.test);
1916 if (!value) goto failed;
1917 if (PyObject_SetAttrString(result, "test", value) == -1)
1918 goto failed;
1919 Py_DECREF(value);
1920 value = ast2obj_expr(o->v.Assert.msg);
1921 if (!value) goto failed;
1922 if (PyObject_SetAttrString(result, "msg", value) == -1)
1923 goto failed;
1924 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001925 break;
1926 case Import_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001927 result = PyType_GenericNew(Import_type, NULL, NULL);
1928 if (!result) goto failed;
1929 value = ast2obj_list(o->v.Import.names, ast2obj_alias);
1930 if (!value) goto failed;
1931 if (PyObject_SetAttrString(result, "names", value) == -1)
1932 goto failed;
1933 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001934 break;
1935 case ImportFrom_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001936 result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
1937 if (!result) goto failed;
1938 value = ast2obj_identifier(o->v.ImportFrom.module);
1939 if (!value) goto failed;
1940 if (PyObject_SetAttrString(result, "module", value) == -1)
1941 goto failed;
1942 Py_DECREF(value);
1943 value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
1944 if (!value) goto failed;
1945 if (PyObject_SetAttrString(result, "names", value) == -1)
1946 goto failed;
1947 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001948 break;
1949 case Exec_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001950 result = PyType_GenericNew(Exec_type, NULL, NULL);
1951 if (!result) goto failed;
1952 value = ast2obj_expr(o->v.Exec.body);
1953 if (!value) goto failed;
1954 if (PyObject_SetAttrString(result, "body", value) == -1)
1955 goto failed;
1956 Py_DECREF(value);
1957 value = ast2obj_expr(o->v.Exec.globals);
1958 if (!value) goto failed;
1959 if (PyObject_SetAttrString(result, "globals", value) == -1)
1960 goto failed;
1961 Py_DECREF(value);
1962 value = ast2obj_expr(o->v.Exec.locals);
1963 if (!value) goto failed;
1964 if (PyObject_SetAttrString(result, "locals", value) == -1)
1965 goto failed;
1966 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001967 break;
1968 case Global_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001969 result = PyType_GenericNew(Global_type, NULL, NULL);
1970 if (!result) goto failed;
1971 value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
1972 if (!value) goto failed;
1973 if (PyObject_SetAttrString(result, "names", value) == -1)
1974 goto failed;
1975 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001976 break;
1977 case Expr_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001978 result = PyType_GenericNew(Expr_type, NULL, NULL);
1979 if (!result) goto failed;
1980 value = ast2obj_expr(o->v.Expr.value);
1981 if (!value) goto failed;
1982 if (PyObject_SetAttrString(result, "value", value) == -1)
1983 goto failed;
1984 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001985 break;
1986 case Pass_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001987 result = PyType_GenericNew(Pass_type, NULL, NULL);
1988 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001989 break;
1990 case Break_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001991 result = PyType_GenericNew(Break_type, NULL, NULL);
1992 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001993 break;
1994 case Continue_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001995 result = PyType_GenericNew(Continue_type, NULL, NULL);
1996 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001997 break;
1998 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001999
2000 return result;
2001failed:
2002 Py_XDECREF(value);
2003 Py_XDECREF(result);
2004 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002005}
2006
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002007PyObject*
2008ast2obj_expr(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002009{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002010 expr_ty o = (expr_ty)_o;
2011 PyObject *result = NULL, *value = NULL;
2012 if (!o) {
2013 Py_INCREF(Py_None);
2014 return Py_None;
2015 }
2016
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002017 switch (o->kind) {
2018 case BoolOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002019 result = PyType_GenericNew(BoolOp_type, NULL, NULL);
2020 if (!result) goto failed;
2021 value = ast2obj_boolop(o->v.BoolOp.op);
2022 if (!value) goto failed;
2023 if (PyObject_SetAttrString(result, "op", value) == -1)
2024 goto failed;
2025 Py_DECREF(value);
2026 value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
2027 if (!value) goto failed;
2028 if (PyObject_SetAttrString(result, "values", value) == -1)
2029 goto failed;
2030 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002031 break;
2032 case BinOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002033 result = PyType_GenericNew(BinOp_type, NULL, NULL);
2034 if (!result) goto failed;
2035 value = ast2obj_expr(o->v.BinOp.left);
2036 if (!value) goto failed;
2037 if (PyObject_SetAttrString(result, "left", value) == -1)
2038 goto failed;
2039 Py_DECREF(value);
2040 value = ast2obj_operator(o->v.BinOp.op);
2041 if (!value) goto failed;
2042 if (PyObject_SetAttrString(result, "op", value) == -1)
2043 goto failed;
2044 Py_DECREF(value);
2045 value = ast2obj_expr(o->v.BinOp.right);
2046 if (!value) goto failed;
2047 if (PyObject_SetAttrString(result, "right", value) == -1)
2048 goto failed;
2049 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002050 break;
2051 case UnaryOp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002052 result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
2053 if (!result) goto failed;
2054 value = ast2obj_unaryop(o->v.UnaryOp.op);
2055 if (!value) goto failed;
2056 if (PyObject_SetAttrString(result, "op", value) == -1)
2057 goto failed;
2058 Py_DECREF(value);
2059 value = ast2obj_expr(o->v.UnaryOp.operand);
2060 if (!value) goto failed;
2061 if (PyObject_SetAttrString(result, "operand", value) == -1)
2062 goto failed;
2063 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002064 break;
2065 case Lambda_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002066 result = PyType_GenericNew(Lambda_type, NULL, NULL);
2067 if (!result) goto failed;
2068 value = ast2obj_arguments(o->v.Lambda.args);
2069 if (!value) goto failed;
2070 if (PyObject_SetAttrString(result, "args", value) == -1)
2071 goto failed;
2072 Py_DECREF(value);
2073 value = ast2obj_expr(o->v.Lambda.body);
2074 if (!value) goto failed;
2075 if (PyObject_SetAttrString(result, "body", value) == -1)
2076 goto failed;
2077 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002078 break;
2079 case Dict_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002080 result = PyType_GenericNew(Dict_type, NULL, NULL);
2081 if (!result) goto failed;
2082 value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
2083 if (!value) goto failed;
2084 if (PyObject_SetAttrString(result, "keys", value) == -1)
2085 goto failed;
2086 Py_DECREF(value);
2087 value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
2088 if (!value) goto failed;
2089 if (PyObject_SetAttrString(result, "values", value) == -1)
2090 goto failed;
2091 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002092 break;
2093 case ListComp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002094 result = PyType_GenericNew(ListComp_type, NULL, NULL);
2095 if (!result) goto failed;
2096 value = ast2obj_expr(o->v.ListComp.elt);
2097 if (!value) goto failed;
2098 if (PyObject_SetAttrString(result, "elt", value) == -1)
2099 goto failed;
2100 Py_DECREF(value);
2101 value = ast2obj_list(o->v.ListComp.generators,
2102 ast2obj_comprehension);
2103 if (!value) goto failed;
2104 if (PyObject_SetAttrString(result, "generators", value) == -1)
2105 goto failed;
2106 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002107 break;
2108 case GeneratorExp_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002109 result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
2110 if (!result) goto failed;
2111 value = ast2obj_expr(o->v.GeneratorExp.elt);
2112 if (!value) goto failed;
2113 if (PyObject_SetAttrString(result, "elt", value) == -1)
2114 goto failed;
2115 Py_DECREF(value);
2116 value = ast2obj_list(o->v.GeneratorExp.generators,
2117 ast2obj_comprehension);
2118 if (!value) goto failed;
2119 if (PyObject_SetAttrString(result, "generators", value) == -1)
2120 goto failed;
2121 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002122 break;
2123 case Yield_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002124 result = PyType_GenericNew(Yield_type, NULL, NULL);
2125 if (!result) goto failed;
2126 value = ast2obj_expr(o->v.Yield.value);
2127 if (!value) goto failed;
2128 if (PyObject_SetAttrString(result, "value", value) == -1)
2129 goto failed;
2130 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002131 break;
2132 case Compare_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002133 result = PyType_GenericNew(Compare_type, NULL, NULL);
2134 if (!result) goto failed;
2135 value = ast2obj_expr(o->v.Compare.left);
2136 if (!value) goto failed;
2137 if (PyObject_SetAttrString(result, "left", value) == -1)
2138 goto failed;
2139 Py_DECREF(value);
Martin v. Löwisce1d5d22006-02-26 20:51:25 +00002140 {
2141 int i, n = asdl_seq_LEN(o->v.Compare.ops);
2142 value = PyList_New(n);
2143 if (!value) goto failed;
2144 for(i = 0; i < n; i++)
2145 PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
2146 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002147 if (!value) goto failed;
2148 if (PyObject_SetAttrString(result, "ops", value) == -1)
2149 goto failed;
2150 Py_DECREF(value);
2151 value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
2152 if (!value) goto failed;
2153 if (PyObject_SetAttrString(result, "comparators", value) == -1)
2154 goto failed;
2155 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002156 break;
2157 case Call_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002158 result = PyType_GenericNew(Call_type, NULL, NULL);
2159 if (!result) goto failed;
2160 value = ast2obj_expr(o->v.Call.func);
2161 if (!value) goto failed;
2162 if (PyObject_SetAttrString(result, "func", value) == -1)
2163 goto failed;
2164 Py_DECREF(value);
2165 value = ast2obj_list(o->v.Call.args, ast2obj_expr);
2166 if (!value) goto failed;
2167 if (PyObject_SetAttrString(result, "args", value) == -1)
2168 goto failed;
2169 Py_DECREF(value);
2170 value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
2171 if (!value) goto failed;
2172 if (PyObject_SetAttrString(result, "keywords", value) == -1)
2173 goto failed;
2174 Py_DECREF(value);
2175 value = ast2obj_expr(o->v.Call.starargs);
2176 if (!value) goto failed;
2177 if (PyObject_SetAttrString(result, "starargs", value) == -1)
2178 goto failed;
2179 Py_DECREF(value);
2180 value = ast2obj_expr(o->v.Call.kwargs);
2181 if (!value) goto failed;
2182 if (PyObject_SetAttrString(result, "kwargs", value) == -1)
2183 goto failed;
2184 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002185 break;
2186 case Repr_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002187 result = PyType_GenericNew(Repr_type, NULL, NULL);
2188 if (!result) goto failed;
2189 value = ast2obj_expr(o->v.Repr.value);
2190 if (!value) goto failed;
2191 if (PyObject_SetAttrString(result, "value", value) == -1)
2192 goto failed;
2193 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002194 break;
2195 case Num_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002196 result = PyType_GenericNew(Num_type, NULL, NULL);
2197 if (!result) goto failed;
2198 value = ast2obj_object(o->v.Num.n);
2199 if (!value) goto failed;
2200 if (PyObject_SetAttrString(result, "n", value) == -1)
2201 goto failed;
2202 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002203 break;
2204 case Str_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002205 result = PyType_GenericNew(Str_type, NULL, NULL);
2206 if (!result) goto failed;
2207 value = ast2obj_string(o->v.Str.s);
2208 if (!value) goto failed;
2209 if (PyObject_SetAttrString(result, "s", value) == -1)
2210 goto failed;
2211 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002212 break;
2213 case Attribute_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002214 result = PyType_GenericNew(Attribute_type, NULL, NULL);
2215 if (!result) goto failed;
2216 value = ast2obj_expr(o->v.Attribute.value);
2217 if (!value) goto failed;
2218 if (PyObject_SetAttrString(result, "value", value) == -1)
2219 goto failed;
2220 Py_DECREF(value);
2221 value = ast2obj_identifier(o->v.Attribute.attr);
2222 if (!value) goto failed;
2223 if (PyObject_SetAttrString(result, "attr", value) == -1)
2224 goto failed;
2225 Py_DECREF(value);
2226 value = ast2obj_expr_context(o->v.Attribute.ctx);
2227 if (!value) goto failed;
2228 if (PyObject_SetAttrString(result, "ctx", value) == -1)
2229 goto failed;
2230 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002231 break;
2232 case Subscript_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002233 result = PyType_GenericNew(Subscript_type, NULL, NULL);
2234 if (!result) goto failed;
2235 value = ast2obj_expr(o->v.Subscript.value);
2236 if (!value) goto failed;
2237 if (PyObject_SetAttrString(result, "value", value) == -1)
2238 goto failed;
2239 Py_DECREF(value);
2240 value = ast2obj_slice(o->v.Subscript.slice);
2241 if (!value) goto failed;
2242 if (PyObject_SetAttrString(result, "slice", value) == -1)
2243 goto failed;
2244 Py_DECREF(value);
2245 value = ast2obj_expr_context(o->v.Subscript.ctx);
2246 if (!value) goto failed;
2247 if (PyObject_SetAttrString(result, "ctx", value) == -1)
2248 goto failed;
2249 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002250 break;
2251 case Name_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002252 result = PyType_GenericNew(Name_type, NULL, NULL);
2253 if (!result) goto failed;
2254 value = ast2obj_identifier(o->v.Name.id);
2255 if (!value) goto failed;
2256 if (PyObject_SetAttrString(result, "id", value) == -1)
2257 goto failed;
2258 Py_DECREF(value);
2259 value = ast2obj_expr_context(o->v.Name.ctx);
2260 if (!value) goto failed;
2261 if (PyObject_SetAttrString(result, "ctx", value) == -1)
2262 goto failed;
2263 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002264 break;
2265 case List_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002266 result = PyType_GenericNew(List_type, NULL, NULL);
2267 if (!result) goto failed;
2268 value = ast2obj_list(o->v.List.elts, ast2obj_expr);
2269 if (!value) goto failed;
2270 if (PyObject_SetAttrString(result, "elts", value) == -1)
2271 goto failed;
2272 Py_DECREF(value);
2273 value = ast2obj_expr_context(o->v.List.ctx);
2274 if (!value) goto failed;
2275 if (PyObject_SetAttrString(result, "ctx", value) == -1)
2276 goto failed;
2277 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002278 break;
2279 case Tuple_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002280 result = PyType_GenericNew(Tuple_type, NULL, NULL);
2281 if (!result) goto failed;
2282 value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
2283 if (!value) goto failed;
2284 if (PyObject_SetAttrString(result, "elts", value) == -1)
2285 goto failed;
2286 Py_DECREF(value);
2287 value = ast2obj_expr_context(o->v.Tuple.ctx);
2288 if (!value) goto failed;
2289 if (PyObject_SetAttrString(result, "ctx", value) == -1)
2290 goto failed;
2291 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002292 break;
2293 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002294
2295 return result;
2296failed:
2297 Py_XDECREF(value);
2298 Py_XDECREF(result);
2299 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002300}
2301
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002302PyObject* ast2obj_expr_context(expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002303{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002304 switch(o) {
2305 case Load:
2306 Py_INCREF(Load_singleton);
2307 return Load_singleton;
2308 case Store:
2309 Py_INCREF(Store_singleton);
2310 return Store_singleton;
2311 case Del:
2312 Py_INCREF(Del_singleton);
2313 return Del_singleton;
2314 case AugLoad:
2315 Py_INCREF(AugLoad_singleton);
2316 return AugLoad_singleton;
2317 case AugStore:
2318 Py_INCREF(AugStore_singleton);
2319 return AugStore_singleton;
2320 case Param:
2321 Py_INCREF(Param_singleton);
2322 return Param_singleton;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002323 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002324 return NULL; /* cannot happen */
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002325}
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002326PyObject*
2327ast2obj_slice(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002328{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002329 slice_ty o = (slice_ty)_o;
2330 PyObject *result = NULL, *value = NULL;
2331 if (!o) {
2332 Py_INCREF(Py_None);
2333 return Py_None;
2334 }
2335
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002336 switch (o->kind) {
2337 case Ellipsis_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002338 result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
2339 if (!result) goto failed;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002340 break;
2341 case Slice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002342 result = PyType_GenericNew(Slice_type, NULL, NULL);
2343 if (!result) goto failed;
2344 value = ast2obj_expr(o->v.Slice.lower);
2345 if (!value) goto failed;
2346 if (PyObject_SetAttrString(result, "lower", value) == -1)
2347 goto failed;
2348 Py_DECREF(value);
2349 value = ast2obj_expr(o->v.Slice.upper);
2350 if (!value) goto failed;
2351 if (PyObject_SetAttrString(result, "upper", value) == -1)
2352 goto failed;
2353 Py_DECREF(value);
2354 value = ast2obj_expr(o->v.Slice.step);
2355 if (!value) goto failed;
2356 if (PyObject_SetAttrString(result, "step", value) == -1)
2357 goto failed;
2358 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002359 break;
2360 case ExtSlice_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002361 result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
2362 if (!result) goto failed;
2363 value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
2364 if (!value) goto failed;
2365 if (PyObject_SetAttrString(result, "dims", value) == -1)
2366 goto failed;
2367 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002368 break;
2369 case Index_kind:
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002370 result = PyType_GenericNew(Index_type, NULL, NULL);
2371 if (!result) goto failed;
2372 value = ast2obj_expr(o->v.Index.value);
2373 if (!value) goto failed;
2374 if (PyObject_SetAttrString(result, "value", value) == -1)
2375 goto failed;
2376 Py_DECREF(value);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002377 break;
2378 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002379
2380 return result;
2381failed:
2382 Py_XDECREF(value);
2383 Py_XDECREF(result);
2384 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002385}
2386
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002387PyObject* ast2obj_boolop(boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002388{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002389 switch(o) {
2390 case And:
2391 Py_INCREF(And_singleton);
2392 return And_singleton;
2393 case Or:
2394 Py_INCREF(Or_singleton);
2395 return Or_singleton;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002396 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002397 return NULL; /* cannot happen */
2398}
2399PyObject* ast2obj_operator(operator_ty o)
2400{
2401 switch(o) {
2402 case Add:
2403 Py_INCREF(Add_singleton);
2404 return Add_singleton;
2405 case Sub:
2406 Py_INCREF(Sub_singleton);
2407 return Sub_singleton;
2408 case Mult:
2409 Py_INCREF(Mult_singleton);
2410 return Mult_singleton;
2411 case Div:
2412 Py_INCREF(Div_singleton);
2413 return Div_singleton;
2414 case Mod:
2415 Py_INCREF(Mod_singleton);
2416 return Mod_singleton;
2417 case Pow:
2418 Py_INCREF(Pow_singleton);
2419 return Pow_singleton;
2420 case LShift:
2421 Py_INCREF(LShift_singleton);
2422 return LShift_singleton;
2423 case RShift:
2424 Py_INCREF(RShift_singleton);
2425 return RShift_singleton;
2426 case BitOr:
2427 Py_INCREF(BitOr_singleton);
2428 return BitOr_singleton;
2429 case BitXor:
2430 Py_INCREF(BitXor_singleton);
2431 return BitXor_singleton;
2432 case BitAnd:
2433 Py_INCREF(BitAnd_singleton);
2434 return BitAnd_singleton;
2435 case FloorDiv:
2436 Py_INCREF(FloorDiv_singleton);
2437 return FloorDiv_singleton;
2438 }
2439 return NULL; /* cannot happen */
2440}
2441PyObject* ast2obj_unaryop(unaryop_ty o)
2442{
2443 switch(o) {
2444 case Invert:
2445 Py_INCREF(Invert_singleton);
2446 return Invert_singleton;
2447 case Not:
2448 Py_INCREF(Not_singleton);
2449 return Not_singleton;
2450 case UAdd:
2451 Py_INCREF(UAdd_singleton);
2452 return UAdd_singleton;
2453 case USub:
2454 Py_INCREF(USub_singleton);
2455 return USub_singleton;
2456 }
2457 return NULL; /* cannot happen */
2458}
2459PyObject* ast2obj_cmpop(cmpop_ty o)
2460{
2461 switch(o) {
2462 case Eq:
2463 Py_INCREF(Eq_singleton);
2464 return Eq_singleton;
2465 case NotEq:
2466 Py_INCREF(NotEq_singleton);
2467 return NotEq_singleton;
2468 case Lt:
2469 Py_INCREF(Lt_singleton);
2470 return Lt_singleton;
2471 case LtE:
2472 Py_INCREF(LtE_singleton);
2473 return LtE_singleton;
2474 case Gt:
2475 Py_INCREF(Gt_singleton);
2476 return Gt_singleton;
2477 case GtE:
2478 Py_INCREF(GtE_singleton);
2479 return GtE_singleton;
2480 case Is:
2481 Py_INCREF(Is_singleton);
2482 return Is_singleton;
2483 case IsNot:
2484 Py_INCREF(IsNot_singleton);
2485 return IsNot_singleton;
2486 case In:
2487 Py_INCREF(In_singleton);
2488 return In_singleton;
2489 case NotIn:
2490 Py_INCREF(NotIn_singleton);
2491 return NotIn_singleton;
2492 }
2493 return NULL; /* cannot happen */
2494}
2495PyObject*
2496ast2obj_comprehension(void* _o)
2497{
2498 comprehension_ty o = (comprehension_ty)_o;
2499 PyObject *result = NULL, *value = NULL;
2500 if (!o) {
2501 Py_INCREF(Py_None);
2502 return Py_None;
2503 }
2504
2505 result = PyType_GenericNew(comprehension_type, NULL, NULL);
2506 if (!result) return NULL;
2507 value = ast2obj_expr(o->target);
2508 if (!value) goto failed;
2509 if (PyObject_SetAttrString(result, "target", value) == -1)
2510 goto failed;
2511 Py_DECREF(value);
2512 value = ast2obj_expr(o->iter);
2513 if (!value) goto failed;
2514 if (PyObject_SetAttrString(result, "iter", value) == -1)
2515 goto failed;
2516 Py_DECREF(value);
2517 value = ast2obj_list(o->ifs, ast2obj_expr);
2518 if (!value) goto failed;
2519 if (PyObject_SetAttrString(result, "ifs", value) == -1)
2520 goto failed;
2521 Py_DECREF(value);
2522
2523 return result;
2524failed:
2525 Py_XDECREF(value);
2526 Py_XDECREF(result);
2527 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002528}
2529
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002530PyObject*
2531ast2obj_excepthandler(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002532{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002533 excepthandler_ty o = (excepthandler_ty)_o;
2534 PyObject *result = NULL, *value = NULL;
2535 if (!o) {
2536 Py_INCREF(Py_None);
2537 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002538 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002539
2540 result = PyType_GenericNew(excepthandler_type, NULL, NULL);
2541 if (!result) return NULL;
2542 value = ast2obj_expr(o->type);
2543 if (!value) goto failed;
2544 if (PyObject_SetAttrString(result, "type", value) == -1)
2545 goto failed;
2546 Py_DECREF(value);
2547 value = ast2obj_expr(o->name);
2548 if (!value) goto failed;
2549 if (PyObject_SetAttrString(result, "name", value) == -1)
2550 goto failed;
2551 Py_DECREF(value);
2552 value = ast2obj_list(o->body, ast2obj_stmt);
2553 if (!value) goto failed;
2554 if (PyObject_SetAttrString(result, "body", value) == -1)
2555 goto failed;
2556 Py_DECREF(value);
2557
2558 return result;
2559failed:
2560 Py_XDECREF(value);
2561 Py_XDECREF(result);
2562 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002563}
2564
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002565PyObject*
2566ast2obj_arguments(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002567{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002568 arguments_ty o = (arguments_ty)_o;
2569 PyObject *result = NULL, *value = NULL;
2570 if (!o) {
2571 Py_INCREF(Py_None);
2572 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002573 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002574
2575 result = PyType_GenericNew(arguments_type, NULL, NULL);
2576 if (!result) return NULL;
2577 value = ast2obj_list(o->args, ast2obj_expr);
2578 if (!value) goto failed;
2579 if (PyObject_SetAttrString(result, "args", value) == -1)
2580 goto failed;
2581 Py_DECREF(value);
2582 value = ast2obj_identifier(o->vararg);
2583 if (!value) goto failed;
2584 if (PyObject_SetAttrString(result, "vararg", value) == -1)
2585 goto failed;
2586 Py_DECREF(value);
2587 value = ast2obj_identifier(o->kwarg);
2588 if (!value) goto failed;
2589 if (PyObject_SetAttrString(result, "kwarg", value) == -1)
2590 goto failed;
2591 Py_DECREF(value);
2592 value = ast2obj_list(o->defaults, ast2obj_expr);
2593 if (!value) goto failed;
2594 if (PyObject_SetAttrString(result, "defaults", value) == -1)
2595 goto failed;
2596 Py_DECREF(value);
2597
2598 return result;
2599failed:
2600 Py_XDECREF(value);
2601 Py_XDECREF(result);
2602 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002603}
2604
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002605PyObject*
2606ast2obj_keyword(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002607{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002608 keyword_ty o = (keyword_ty)_o;
2609 PyObject *result = NULL, *value = NULL;
2610 if (!o) {
2611 Py_INCREF(Py_None);
2612 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002613 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002614
2615 result = PyType_GenericNew(keyword_type, NULL, NULL);
2616 if (!result) return NULL;
2617 value = ast2obj_identifier(o->arg);
2618 if (!value) goto failed;
2619 if (PyObject_SetAttrString(result, "arg", value) == -1)
2620 goto failed;
2621 Py_DECREF(value);
2622 value = ast2obj_expr(o->value);
2623 if (!value) goto failed;
2624 if (PyObject_SetAttrString(result, "value", value) == -1)
2625 goto failed;
2626 Py_DECREF(value);
2627
2628 return result;
2629failed:
2630 Py_XDECREF(value);
2631 Py_XDECREF(result);
2632 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002633}
2634
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002635PyObject*
2636ast2obj_alias(void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002637{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002638 alias_ty o = (alias_ty)_o;
2639 PyObject *result = NULL, *value = NULL;
2640 if (!o) {
2641 Py_INCREF(Py_None);
2642 return Py_None;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002643 }
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002644
2645 result = PyType_GenericNew(alias_type, NULL, NULL);
2646 if (!result) return NULL;
2647 value = ast2obj_identifier(o->name);
2648 if (!value) goto failed;
2649 if (PyObject_SetAttrString(result, "name", value) == -1)
2650 goto failed;
2651 Py_DECREF(value);
2652 value = ast2obj_identifier(o->asname);
2653 if (!value) goto failed;
2654 if (PyObject_SetAttrString(result, "asname", value) == -1)
2655 goto failed;
2656 Py_DECREF(value);
2657
2658 return result;
2659failed:
2660 Py_XDECREF(value);
2661 Py_XDECREF(result);
2662 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002663}
2664
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002665
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002666
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002667PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002668{
Martin v. Löwisbd260da2006-02-26 19:42:26 +00002669 init_types();
2670 return ast2obj_mod(t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002671}
2672
Neal Norwitz7b5a6042005-11-13 19:14:20 +00002673