1c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/* File automatically generated by Parser/asdl_c.py. */
2c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/*
5c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel   __version__ 82160.
6c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
7c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel   This module must be committed separately after each AST grammar change;
8c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel   The __version__ number is set to the revision number of the commit
9c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel   containing the grammar change.
10c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*/
11c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
12c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel#include "Python.h"
13c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel#include "Python-ast.h"
14c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
15c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject AST_type;
16c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *mod_type;
17c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_mod(void*);
18c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Module_type;
19c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Module_fields[]={
20c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
21c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
22c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Interactive_type;
23c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Interactive_fields[]={
24c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
25c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
26c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Expression_type;
27c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Expression_fields[]={
28c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
29c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
30c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Suite_type;
31c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Suite_fields[]={
32c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
33c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
34c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *stmt_type;
35c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *stmt_attributes[] = {
36c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "lineno",
37c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "col_offset",
38c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
39c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_stmt(void*);
40c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *FunctionDef_type;
41c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *FunctionDef_fields[]={
42c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "name",
43c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "args",
44c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
45c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "decorator_list",
46c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
47c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *ClassDef_type;
48c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *ClassDef_fields[]={
49c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "name",
50c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "bases",
51c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
52c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "decorator_list",
53c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
54c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Return_type;
55c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Return_fields[]={
56c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
57c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
58c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Delete_type;
59c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Delete_fields[]={
60c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "targets",
61c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
62c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Assign_type;
63c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Assign_fields[]={
64c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "targets",
65c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
66c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
67c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *AugAssign_type;
68c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *AugAssign_fields[]={
69c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "target",
70c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "op",
71c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
72c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
73c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Print_type;
74c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Print_fields[]={
75c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "dest",
76c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "values",
77c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "nl",
78c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
79c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *For_type;
80c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *For_fields[]={
81c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "target",
82c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "iter",
83c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
84c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "orelse",
85c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
86c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *While_type;
87c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *While_fields[]={
88c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "test",
89c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
90c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "orelse",
91c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
92c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *If_type;
93c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *If_fields[]={
94c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "test",
95c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
96c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "orelse",
97c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
98c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *With_type;
99c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *With_fields[]={
100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "context_expr",
101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "optional_vars",
102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Raise_type;
105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Raise_fields[]={
106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "type",
107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "inst",
108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "tback",
109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *TryExcept_type;
111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *TryExcept_fields[]={
112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "handlers",
114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "orelse",
115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *TryFinally_type;
117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *TryFinally_fields[]={
118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "finalbody",
120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Assert_type;
122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Assert_fields[]={
123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "test",
124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "msg",
125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Import_type;
127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Import_fields[]={
128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "names",
129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *ImportFrom_type;
131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *ImportFrom_fields[]={
132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "module",
133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "names",
134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "level",
135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Exec_type;
137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Exec_fields[]={
138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "globals",
140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "locals",
141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Global_type;
143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Global_fields[]={
144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "names",
145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Expr_type;
147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Expr_fields[]={
148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Pass_type;
151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Break_type;
152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Continue_type;
153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *expr_type;
154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *expr_attributes[] = {
155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "lineno",
156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "col_offset",
157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_expr(void*);
159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *BoolOp_type;
160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *BoolOp_fields[]={
161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "op",
162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "values",
163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *BinOp_type;
165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *BinOp_fields[]={
166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "left",
167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "op",
168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "right",
169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *UnaryOp_type;
171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *UnaryOp_fields[]={
172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "op",
173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "operand",
174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Lambda_type;
176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Lambda_fields[]={
177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "args",
178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *IfExp_type;
181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *IfExp_fields[]={
182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "test",
183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "orelse",
185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Dict_type;
187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Dict_fields[]={
188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "keys",
189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "values",
190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Set_type;
192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Set_fields[]={
193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elts",
194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *ListComp_type;
196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *ListComp_fields[]={
197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elt",
198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "generators",
199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *SetComp_type;
201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *SetComp_fields[]={
202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elt",
203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "generators",
204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *DictComp_type;
206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *DictComp_fields[]={
207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "key",
208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "generators",
210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *GeneratorExp_type;
212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *GeneratorExp_fields[]={
213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elt",
214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "generators",
215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Yield_type;
217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Yield_fields[]={
218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Compare_type;
221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Compare_fields[]={
222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "left",
223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ops",
224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "comparators",
225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Call_type;
227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Call_fields[]={
228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "func",
229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "args",
230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "keywords",
231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "starargs",
232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "kwargs",
233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Repr_type;
235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Repr_fields[]={
236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Num_type;
239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Num_fields[]={
240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "n",
241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Str_type;
243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Str_fields[]={
244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "s",
245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Attribute_type;
247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Attribute_fields[]={
248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "attr",
250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ctx",
251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Subscript_type;
253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Subscript_fields[]={
254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "slice",
256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ctx",
257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Name_type;
259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Name_fields[]={
260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "id",
261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ctx",
262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *List_type;
264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *List_fields[]={
265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elts",
266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ctx",
267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Tuple_type;
269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Tuple_fields[]={
270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "elts",
271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ctx",
272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *expr_context_type;
274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *Load_singleton, *Store_singleton, *Del_singleton,
275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*AugLoad_singleton, *AugStore_singleton, *Param_singleton;
276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_expr_context(expr_context_ty);
277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Load_type;
278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Store_type;
279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Del_type;
280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *AugLoad_type;
281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *AugStore_type;
282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Param_type;
283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *slice_type;
284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_slice(void*);
285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Ellipsis_type;
286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Slice_type;
287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Slice_fields[]={
288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "lower",
289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "upper",
290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "step",
291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *ExtSlice_type;
293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *ExtSlice_fields[]={
294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "dims",
295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Index_type;
297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *Index_fields[]={
298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *boolop_type;
301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *And_singleton, *Or_singleton;
302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_boolop(boolop_ty);
303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *And_type;
304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Or_type;
305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *operator_type;
306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton,
308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton,
309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*FloorDiv_singleton;
310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_operator(operator_ty);
311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Add_type;
312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Sub_type;
313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Mult_type;
314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Div_type;
315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Mod_type;
316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Pow_type;
317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *LShift_type;
318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *RShift_type;
319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *BitOr_type;
320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *BitXor_type;
321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *BitAnd_type;
322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *FloorDiv_type;
323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *unaryop_type;
324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*USub_singleton;
326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_unaryop(unaryop_ty);
327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Invert_type;
328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Not_type;
329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *UAdd_type;
330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *USub_type;
331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *cmpop_type;
332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel*NotIn_singleton;
335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_cmpop(cmpop_ty);
336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Eq_type;
337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *NotEq_type;
338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Lt_type;
339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *LtE_type;
340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Gt_type;
341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *GtE_type;
342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *Is_type;
343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *IsNot_type;
344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *In_type;
345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *NotIn_type;
346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *comprehension_type;
347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_comprehension(void*);
348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *comprehension_fields[]={
349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "target",
350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "iter",
351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "ifs",
352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *excepthandler_type;
354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *excepthandler_attributes[] = {
355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "lineno",
356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "col_offset",
357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_excepthandler(void*);
359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *ExceptHandler_type;
360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *ExceptHandler_fields[]={
361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "type",
362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "name",
363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "body",
364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *arguments_type;
366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_arguments(void*);
367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *arguments_fields[]={
368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "args",
369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "vararg",
370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "kwarg",
371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "defaults",
372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *keyword_type;
374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_keyword(void*);
375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *keyword_fields[]={
376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "arg",
377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "value",
378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject *alias_type;
380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_alias(void*);
381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic char *alias_fields[]={
382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "name",
383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        "asname",
384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int
388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast_type_init(PyObject *self, PyObject *args, PyObject *kw)
389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_ssize_t i, numfields = 0;
391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int res = -1;
392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *key, *value, *fields;
393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    fields = PyObject_GetAttrString((PyObject*)Py_TYPE(self), "_fields");
394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!fields)
395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Clear();
396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (fields) {
397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        numfields = PySequence_Size(fields);
398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (numfields == -1)
399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            goto cleanup;
400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    res = 0; /* if no error occurs, this stays 0 to the end */
402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (PyTuple_GET_SIZE(args) > 0) {
403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (numfields != PyTuple_GET_SIZE(args)) {
404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                         "%zd positional argument%s",
406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                         Py_TYPE(self)->tp_name,
407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                         numfields == 0 ? "" : "either 0 or ",
408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                         numfields, numfields == 1 ? "" : "s");
409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            res = -1;
410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            goto cleanup;
411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            /* cannot be reached when fields is NULL */
414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            PyObject *name = PySequence_GetItem(fields, i);
415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            if (!name) {
416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = -1;
417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto cleanup;
418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            }
419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            Py_DECREF(name);
421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            if (res < 0)
422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto cleanup;
423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (kw) {
426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        i = 0;  /* needed by PyDict_Next */
427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        while (PyDict_Next(kw, &i, &key, &value)) {
428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            res = PyObject_SetAttr(self, key, value);
429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            if (res < 0)
430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto cleanup;
431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel  cleanup:
434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_XDECREF(fields);
435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return res;
436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/* Pickling support */
439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject *
440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast_type_reduce(PyObject *self, PyObject *unused)
441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *res;
443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *dict = PyObject_GetAttrString(self, "__dict__");
444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (dict == NULL) {
445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyErr_ExceptionMatches(PyExc_AttributeError))
446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            PyErr_Clear();
447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        else
448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return NULL;
449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (dict) {
451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        res = Py_BuildValue("O()O", Py_TYPE(self), dict);
452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(dict);
453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return res;
454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return Py_BuildValue("O()", Py_TYPE(self));
456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyMethodDef ast_type_methods[] = {
459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    {NULL}
461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject AST_type = {
464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyVarObject_HEAD_INIT(&PyType_Type, 0)
465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    "_ast.AST",
466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    sizeof(PyObject),
467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,
468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_dealloc */
469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_print */
470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_getattr */
471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_setattr */
472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_compare */
473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_repr */
474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_as_number */
475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_as_sequence */
476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_as_mapping */
477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_hash */
478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_call */
479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_str */
480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject_GenericGetAttr, /* tp_getattro */
481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject_GenericSetAttr, /* tp_setattro */
482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_as_buffer */
483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_doc */
485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_traverse */
486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_clear */
487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_richcompare */
488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_weaklistoffset */
489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_iter */
490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_iternext */
491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    ast_type_methods,        /* tp_methods */
492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_members */
493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_getset */
494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_base */
495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_dict */
496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_descr_get */
497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_descr_set */
498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    0,                       /* tp_dictoffset */
499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    (initproc)ast_type_init, /* tp_init */
500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyType_GenericAlloc,     /* tp_alloc */
501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyType_GenericNew,       /* tp_new */
502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject_Del,            /* tp_free */
503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel};
504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *fnames, *result;
509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int i;
510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    fnames = PyTuple_New(num_fields);
511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!fnames) return NULL;
512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    for (i = 0; i < num_fields; i++) {
513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *field = PyString_FromString(fields[i]);
514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!field) {
515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            Py_DECREF(fnames);
516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return NULL;
517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyTuple_SET_ITEM(fnames, i, field);
519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                    type, base, "_fields", fnames, "__module__", "_ast");
522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_DECREF(fnames);
523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return (PyTypeObject*)result;
524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int i, result;
529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *s, *l = PyTuple_New(num_fields);
530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!l)
531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 0;
532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    for (i = 0; i < num_fields; i++) {
533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        s = PyString_FromString(attrs[i]);
534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!s) {
535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            Py_DECREF(l);
536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return 0;
537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyTuple_SET_ITEM(l, i, s);
539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    result = PyObject_SetAttrString((PyObject*)type, "_attributes", l) >= 0;
541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_DECREF(l);
542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return result;
543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/* Conversion AST -> Python */
546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int i, n = asdl_seq_LEN(seq);
550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *result = PyList_New(n);
551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *value;
552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!result)
553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    for (i = 0; i < n; i++) {
555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = func(asdl_seq_GET(seq, i));
556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            Py_DECREF(result);
558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return NULL;
559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyList_SET_ITEM(result, i, value);
561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return result;
563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_object(void *o)
566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!o)
568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        o = Py_None;
569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_INCREF((PyObject*)o);
570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return (PyObject*)o;
571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel#define ast2obj_identifier ast2obj_object
573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel#define ast2obj_string ast2obj_object
574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_bool(bool b)
575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return PyBool_FromLong(b);
577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic PyObject* ast2obj_int(long b)
580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return PyInt_FromLong(b);
582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/* Conversion Python -> AST */
585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (obj == Py_None)
589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        obj = NULL;
590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (obj)
591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyArena_AddPyObject(arena, obj);
592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_XINCREF(obj);
593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    *out = obj;
594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return 0;
595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!PyString_CheckExact(obj) && obj != Py_None) {
600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError,
601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                    "AST identifier must be of type str");
602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return obj2ast_object(obj, out, arena);
605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!PyString_CheckExact(obj) && !PyUnicode_CheckExact(obj)) {
610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_SetString(PyExc_TypeError,
611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                       "AST string must be of type str or unicode");
612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return obj2ast_object(obj, out, arena);
615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int i;
620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *s = PyObject_Repr(obj);
622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (s == NULL) return 1;
623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                     PyString_AS_STRING(s));
625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(s);
626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    i = (int)PyLong_AsLong(obj);
630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (i == -1 && PyErr_Occurred())
631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    *out = i;
633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return 0;
634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_bool(PyObject* obj, bool* out, PyArena* arena)
637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!PyBool_Check(obj)) {
639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *s = PyObject_Repr(obj);
640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (s == NULL) return 1;
641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_ValueError, "invalid boolean value: %.400s",
642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                     PyString_AS_STRING(s));
643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(s);
644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    *out = (obj == Py_True);
648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return 0;
649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int add_ast_fields(void)
652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *empty_tuple, *d;
654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (PyType_Ready(&AST_type) < 0)
655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return -1;
656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    d = AST_type.tp_dict;
657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    empty_tuple = PyTuple_New(0);
658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!empty_tuple ||
659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(empty_tuple);
662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return -1;
663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    Py_DECREF(empty_tuple);
665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return 0;
666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int init_types(void)
670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        static int initialized;
672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (initialized) return 1;
673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (add_ast_fields() < 0) return 0;
674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_type = make_type("mod", &AST_type, NULL, 0);
675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!mod_type) return 0;
676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(mod_type, NULL, 0)) return 0;
677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Module_type = make_type("Module", mod_type, Module_fields, 1);
678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Module_type) return 0;
679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Interactive_type = make_type("Interactive", mod_type,
680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     Interactive_fields, 1);
681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Interactive_type) return 0;
682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Expression_type = make_type("Expression", mod_type, Expression_fields,
683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                    1);
684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Expression_type) return 0;
685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Suite_type) return 0;
687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_type = make_type("stmt", &AST_type, NULL, 0);
688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!stmt_type) return 0;
689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        FunctionDef_type = make_type("FunctionDef", stmt_type,
691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     FunctionDef_fields, 4);
692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!FunctionDef_type) return 0;
693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 4);
694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ClassDef_type) return 0;
695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Return_type = make_type("Return", stmt_type, Return_fields, 1);
696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Return_type) return 0;
697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Delete_type) return 0;
699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Assign_type) return 0;
701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!AugAssign_type) return 0;
703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Print_type = make_type("Print", stmt_type, Print_fields, 3);
704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Print_type) return 0;
705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        For_type = make_type("For", stmt_type, For_fields, 4);
706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!For_type) return 0;
707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        While_type = make_type("While", stmt_type, While_fields, 3);
708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!While_type) return 0;
709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        If_type = make_type("If", stmt_type, If_fields, 3);
710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!If_type) return 0;
711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        With_type = make_type("With", stmt_type, With_fields, 3);
712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!With_type) return 0;
713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Raise_type = make_type("Raise", stmt_type, Raise_fields, 3);
714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Raise_type) return 0;
715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        TryExcept_type = make_type("TryExcept", stmt_type, TryExcept_fields, 3);
716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!TryExcept_type) return 0;
717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        TryFinally_type = make_type("TryFinally", stmt_type, TryFinally_fields,
718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                    2);
719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!TryFinally_type) return 0;
720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Assert_type) return 0;
722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Import_type = make_type("Import", stmt_type, Import_fields, 1);
723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Import_type) return 0;
724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields,
725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                    3);
726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ImportFrom_type) return 0;
727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Exec_type = make_type("Exec", stmt_type, Exec_fields, 3);
728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Exec_type) return 0;
729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Global_type = make_type("Global", stmt_type, Global_fields, 1);
730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Global_type) return 0;
731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Expr_type) return 0;
733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Pass_type = make_type("Pass", stmt_type, NULL, 0);
734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Pass_type) return 0;
735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Break_type = make_type("Break", stmt_type, NULL, 0);
736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Break_type) return 0;
737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Continue_type = make_type("Continue", stmt_type, NULL, 0);
738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Continue_type) return 0;
739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_type = make_type("expr", &AST_type, NULL, 0);
740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!expr_type) return 0;
741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(expr_type, expr_attributes, 2)) return 0;
742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BoolOp_type) return 0;
744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BinOp_type) return 0;
746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!UnaryOp_type) return 0;
748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Lambda_type) return 0;
750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!IfExp_type) return 0;
752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Dict_type) return 0;
754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Set_type = make_type("Set", expr_type, Set_fields, 1);
755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Set_type) return 0;
756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ListComp_type) return 0;
758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!SetComp_type) return 0;
760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!DictComp_type) return 0;
762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        GeneratorExp_type = make_type("GeneratorExp", expr_type,
763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                      GeneratorExp_fields, 2);
764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!GeneratorExp_type) return 0;
765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Yield_type) return 0;
767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Compare_type) return 0;
769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Call_type = make_type("Call", expr_type, Call_fields, 5);
770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Call_type) return 0;
771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Repr_type = make_type("Repr", expr_type, Repr_fields, 1);
772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Repr_type) return 0;
773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Num_type = make_type("Num", expr_type, Num_fields, 1);
774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Num_type) return 0;
775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Str_type = make_type("Str", expr_type, Str_fields, 1);
776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Str_type) return 0;
777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Attribute_type) return 0;
779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Subscript_type) return 0;
781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Name_type = make_type("Name", expr_type, Name_fields, 2);
782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Name_type) return 0;
783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        List_type = make_type("List", expr_type, List_fields, 2);
784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!List_type) return 0;
785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Tuple_type) return 0;
787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!expr_context_type) return 0;
789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(expr_context_type, NULL, 0)) return 0;
790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Load_type = make_type("Load", expr_context_type, NULL, 0);
791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Load_type) return 0;
792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Load_singleton) return 0;
794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Store_type = make_type("Store", expr_context_type, NULL, 0);
795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Store_type) return 0;
796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Store_singleton) return 0;
798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Del_type = make_type("Del", expr_context_type, NULL, 0);
799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Del_type) return 0;
800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Del_singleton) return 0;
802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!AugLoad_type) return 0;
804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!AugLoad_singleton) return 0;
806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!AugStore_type) return 0;
808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!AugStore_singleton) return 0;
810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Param_type = make_type("Param", expr_context_type, NULL, 0);
811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Param_type) return 0;
812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Param_singleton) return 0;
814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_type = make_type("slice", &AST_type, NULL, 0);
815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!slice_type) return 0;
816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(slice_type, NULL, 0)) return 0;
817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Ellipsis_type = make_type("Ellipsis", slice_type, NULL, 0);
818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Ellipsis_type) return 0;
819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Slice_type) return 0;
821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ExtSlice_type) return 0;
823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Index_type = make_type("Index", slice_type, Index_fields, 1);
824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Index_type) return 0;
825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        boolop_type = make_type("boolop", &AST_type, NULL, 0);
826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!boolop_type) return 0;
827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(boolop_type, NULL, 0)) return 0;
828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        And_type = make_type("And", boolop_type, NULL, 0);
829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!And_type) return 0;
830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        And_singleton = PyType_GenericNew(And_type, NULL, NULL);
831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!And_singleton) return 0;
832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Or_type = make_type("Or", boolop_type, NULL, 0);
833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Or_type) return 0;
834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Or_singleton) return 0;
836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        operator_type = make_type("operator", &AST_type, NULL, 0);
837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!operator_type) return 0;
838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(operator_type, NULL, 0)) return 0;
839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Add_type = make_type("Add", operator_type, NULL, 0);
840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Add_type) return 0;
841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Add_singleton) return 0;
843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Sub_type = make_type("Sub", operator_type, NULL, 0);
844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Sub_type) return 0;
845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Sub_singleton) return 0;
847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Mult_type = make_type("Mult", operator_type, NULL, 0);
848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Mult_type) return 0;
849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Mult_singleton) return 0;
851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Div_type = make_type("Div", operator_type, NULL, 0);
852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Div_type) return 0;
853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Div_singleton) return 0;
855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Mod_type = make_type("Mod", operator_type, NULL, 0);
856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Mod_type) return 0;
857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Mod_singleton) return 0;
859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Pow_type = make_type("Pow", operator_type, NULL, 0);
860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Pow_type) return 0;
861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Pow_singleton) return 0;
863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        LShift_type = make_type("LShift", operator_type, NULL, 0);
864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!LShift_type) return 0;
865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!LShift_singleton) return 0;
867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        RShift_type = make_type("RShift", operator_type, NULL, 0);
868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!RShift_type) return 0;
869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!RShift_singleton) return 0;
871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitOr_type = make_type("BitOr", operator_type, NULL, 0);
872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitOr_type) return 0;
873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitOr_singleton) return 0;
875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitXor_type = make_type("BitXor", operator_type, NULL, 0);
876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitXor_type) return 0;
877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitXor_singleton) return 0;
879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitAnd_type) return 0;
881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!BitAnd_singleton) return 0;
883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!FloorDiv_type) return 0;
885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!FloorDiv_singleton) return 0;
887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!unaryop_type) return 0;
889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(unaryop_type, NULL, 0)) return 0;
890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Invert_type = make_type("Invert", unaryop_type, NULL, 0);
891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Invert_type) return 0;
892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Invert_singleton) return 0;
894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Not_type = make_type("Not", unaryop_type, NULL, 0);
895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Not_type) return 0;
896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Not_singleton) return 0;
898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!UAdd_type) return 0;
900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!UAdd_singleton) return 0;
902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        USub_type = make_type("USub", unaryop_type, NULL, 0);
903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!USub_type) return 0;
904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!USub_singleton) return 0;
906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!cmpop_type) return 0;
908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(cmpop_type, NULL, 0)) return 0;
909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Eq_type = make_type("Eq", cmpop_type, NULL, 0);
910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Eq_type) return 0;
911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Eq_singleton) return 0;
913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!NotEq_type) return 0;
915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!NotEq_singleton) return 0;
917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Lt_type = make_type("Lt", cmpop_type, NULL, 0);
918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Lt_type) return 0;
919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Lt_singleton) return 0;
921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        LtE_type = make_type("LtE", cmpop_type, NULL, 0);
922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!LtE_type) return 0;
923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!LtE_singleton) return 0;
925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Gt_type = make_type("Gt", cmpop_type, NULL, 0);
926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Gt_type) return 0;
927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Gt_singleton) return 0;
929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        GtE_type = make_type("GtE", cmpop_type, NULL, 0);
930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!GtE_type) return 0;
931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!GtE_singleton) return 0;
933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Is_type = make_type("Is", cmpop_type, NULL, 0);
934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Is_type) return 0;
935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!Is_singleton) return 0;
937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!IsNot_type) return 0;
939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!IsNot_singleton) return 0;
941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        In_type = make_type("In", cmpop_type, NULL, 0);
942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!In_type) return 0;
943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        In_singleton = PyType_GenericNew(In_type, NULL, NULL);
944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!In_singleton) return 0;
945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!NotIn_type) return 0;
947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!NotIn_singleton) return 0;
949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        comprehension_type = make_type("comprehension", &AST_type,
950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                       comprehension_fields, 3);
951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!comprehension_type) return 0;
952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!excepthandler_type) return 0;
954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!add_attributes(excepthandler_type, excepthandler_attributes, 2))
955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return 0;
956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                       ExceptHandler_fields, 3);
958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ExceptHandler_type) return 0;
959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        arguments_type = make_type("arguments", &AST_type, arguments_fields, 4);
960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!arguments_type) return 0;
961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!keyword_type) return 0;
963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        alias_type = make_type("alias", &AST_type, alias_fields, 2);
964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!alias_type) return 0;
965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        initialized = 1;
966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                arena);
974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                 arena);
981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                 arena);
983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstatic int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielmod_ty
988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielModule(asdl_seq * body, PyArena *arena)
989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_ty p;
991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Module_kind;
995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Module.body = body;
996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielmod_ty
1000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielInteractive(asdl_seq * body, PyArena *arena)
1001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_ty p;
1003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Interactive_kind;
1007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Interactive.body = body;
1008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielmod_ty
1012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielExpression(expr_ty body, PyArena *arena)
1013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_ty p;
1015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!body) {
1016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field body is required for Expression");
1018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Expression_kind;
1024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Expression.body = body;
1025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielmod_ty
1029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielSuite(asdl_seq * body, PyArena *arena)
1030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_ty p;
1032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Suite_kind;
1036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Suite.body = body;
1037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielFunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
1042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            decorator_list, int lineno, int col_offset, PyArena *arena)
1043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!name) {
1046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field name is required for FunctionDef");
1048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!args) {
1051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field args is required for FunctionDef");
1053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = FunctionDef_kind;
1059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.FunctionDef.name = name;
1060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.FunctionDef.args = args;
1061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.FunctionDef.body = body;
1062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.FunctionDef.decorator_list = decorator_list;
1063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielClassDef(identifier name, asdl_seq * bases, asdl_seq * body, asdl_seq *
1070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel         decorator_list, int lineno, int col_offset, PyArena *arena)
1071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!name) {
1074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field name is required for ClassDef");
1076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = ClassDef_kind;
1082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ClassDef.name = name;
1083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ClassDef.bases = bases;
1084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ClassDef.body = body;
1085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ClassDef.decorator_list = decorator_list;
1086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielReturn(expr_ty value, int lineno, int col_offset, PyArena *arena)
1093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Return_kind;
1099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Return.value = value;
1100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielDelete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena)
1107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Delete_kind;
1113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Delete.targets = targets;
1114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielAssign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena
1121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel       *arena)
1122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Assign");
1127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Assign_kind;
1133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Assign.targets = targets;
1134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Assign.value = value;
1135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielAugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
1142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel          col_offset, PyArena *arena)
1143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!target) {
1146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field target is required for AugAssign");
1148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!op) {
1151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field op is required for AugAssign");
1153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for AugAssign");
1158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = AugAssign_kind;
1164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.AugAssign.target = target;
1165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.AugAssign.op = op;
1166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.AugAssign.value = value;
1167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPrint(expr_ty dest, asdl_seq * values, bool nl, int lineno, int col_offset,
1174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      PyArena *arena)
1175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Print_kind;
1181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Print.dest = dest;
1182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Print.values = values;
1183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Print.nl = nl;
1184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
1191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    lineno, int col_offset, PyArena *arena)
1192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!target) {
1195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field target is required for For");
1197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!iter) {
1200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field iter is required for For");
1202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = For_kind;
1208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.For.target = target;
1209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.For.iter = iter;
1210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.For.body = body;
1211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.For.orelse = orelse;
1212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielWhile(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      col_offset, PyArena *arena)
1220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!test) {
1223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field test is required for While");
1225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = While_kind;
1231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.While.test = test;
1232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.While.body = body;
1233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.While.orelse = orelse;
1234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielIf(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
1241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel   col_offset, PyArena *arena)
1242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!test) {
1245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field test is required for If");
1247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = If_kind;
1253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.If.test = test;
1254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.If.body = body;
1255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.If.orelse = orelse;
1256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielWith(expr_ty context_expr, expr_ty optional_vars, asdl_seq * body, int lineno,
1263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     int col_offset, PyArena *arena)
1264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!context_expr) {
1267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field context_expr is required for With");
1269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = With_kind;
1275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.With.context_expr = context_expr;
1276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.With.optional_vars = optional_vars;
1277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.With.body = body;
1278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielRaise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, int col_offset,
1285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      PyArena *arena)
1286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Raise_kind;
1292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Raise.type = type;
1293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Raise.inst = inst;
1294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Raise.tback = tback;
1295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielTryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno,
1302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel          int col_offset, PyArena *arena)
1303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = TryExcept_kind;
1309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.TryExcept.body = body;
1310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.TryExcept.handlers = handlers;
1311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.TryExcept.orelse = orelse;
1312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielTryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, int col_offset,
1319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel           PyArena *arena)
1320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = TryFinally_kind;
1326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.TryFinally.body = body;
1327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.TryFinally.finalbody = finalbody;
1328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielAssert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena)
1335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!test) {
1338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field test is required for Assert");
1340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Assert_kind;
1346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Assert.test = test;
1347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Assert.msg = msg;
1348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielImport(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
1355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Import_kind;
1361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Import.names = names;
1362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
1369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel           col_offset, PyArena *arena)
1370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = ImportFrom_kind;
1376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ImportFrom.module = module;
1377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ImportFrom.names = names;
1378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ImportFrom.level = level;
1379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielExec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, int col_offset,
1386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     PyArena *arena)
1387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!body) {
1390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field body is required for Exec");
1392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Exec_kind;
1398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Exec.body = body;
1399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Exec.globals = globals;
1400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Exec.locals = locals;
1401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielGlobal(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
1408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Global_kind;
1414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Global.names = names;
1415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielExpr(expr_ty value, int lineno, int col_offset, PyArena *arena)
1422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Expr");
1427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Expr_kind;
1433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Expr.value = value;
1434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPass(int lineno, int col_offset, PyArena *arena)
1441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Pass_kind;
1447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielBreak(int lineno, int col_offset, PyArena *arena)
1454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Break_kind;
1460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielstmt_ty
1466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielContinue(int lineno, int col_offset, PyArena *arena)
1467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty p;
1469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Continue_kind;
1473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielBoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena
1480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel       *arena)
1481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!op) {
1484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field op is required for BoolOp");
1486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = BoolOp_kind;
1492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.BoolOp.op = op;
1493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.BoolOp.values = values;
1494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielBinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
1501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      PyArena *arena)
1502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!left) {
1505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field left is required for BinOp");
1507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!op) {
1510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field op is required for BinOp");
1512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!right) {
1515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field right is required for BinOp");
1517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = BinOp_kind;
1523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.BinOp.left = left;
1524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.BinOp.op = op;
1525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.BinOp.right = right;
1526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielUnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena
1533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *arena)
1534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!op) {
1537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field op is required for UnaryOp");
1539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!operand) {
1542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field operand is required for UnaryOp");
1544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = UnaryOp_kind;
1550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.UnaryOp.op = op;
1551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.UnaryOp.operand = operand;
1552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielLambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena
1559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel       *arena)
1560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!args) {
1563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field args is required for Lambda");
1565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!body) {
1568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field body is required for Lambda");
1570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Lambda_kind;
1576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Lambda.args = args;
1577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Lambda.body = body;
1578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielIfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
1585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      PyArena *arena)
1586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!test) {
1589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field test is required for IfExp");
1591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!body) {
1594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field body is required for IfExp");
1596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!orelse) {
1599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field orelse is required for IfExp");
1601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = IfExp_kind;
1607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.IfExp.test = test;
1608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.IfExp.body = body;
1609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.IfExp.orelse = orelse;
1610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielDict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena
1617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     *arena)
1618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Dict_kind;
1624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Dict.keys = keys;
1625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Dict.values = values;
1626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielSet(asdl_seq * elts, int lineno, int col_offset, PyArena *arena)
1633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Set_kind;
1639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Set.elts = elts;
1640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel         PyArena *arena)
1648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!elt) {
1651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field elt is required for ListComp");
1653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = ListComp_kind;
1659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ListComp.elt = elt;
1660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ListComp.generators = generators;
1661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielSetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena
1668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *arena)
1669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!elt) {
1672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field elt is required for SetComp");
1674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = SetComp_kind;
1680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.SetComp.elt = elt;
1681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.SetComp.generators = generators;
1682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielDictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
1689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel         col_offset, PyArena *arena)
1690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!key) {
1693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field key is required for DictComp");
1695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for DictComp");
1700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = DictComp_kind;
1706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.DictComp.key = key;
1707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.DictComp.value = value;
1708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.DictComp.generators = generators;
1709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielGeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
1716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel             PyArena *arena)
1717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!elt) {
1720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field elt is required for GeneratorExp");
1722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = GeneratorExp_kind;
1728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.GeneratorExp.elt = elt;
1729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.GeneratorExp.generators = generators;
1730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielYield(expr_ty value, int lineno, int col_offset, PyArena *arena)
1737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Yield_kind;
1743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Yield.value = value;
1744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielCompare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
1751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int col_offset, PyArena *arena)
1752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!left) {
1755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field left is required for Compare");
1757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Compare_kind;
1763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Compare.left = left;
1764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Compare.ops = ops;
1765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Compare.comparators = comparators;
1766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielCall(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
1773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     expr_ty kwargs, int lineno, int col_offset, PyArena *arena)
1774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!func) {
1777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field func is required for Call");
1779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Call_kind;
1785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Call.func = func;
1786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Call.args = args;
1787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Call.keywords = keywords;
1788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Call.starargs = starargs;
1789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Call.kwargs = kwargs;
1790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielRepr(expr_ty value, int lineno, int col_offset, PyArena *arena)
1797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Repr");
1802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Repr_kind;
1808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Repr.value = value;
1809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielNum(object n, int lineno, int col_offset, PyArena *arena)
1816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!n) {
1819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field n is required for Num");
1821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Num_kind;
1827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Num.n = n;
1828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielStr(string s, int lineno, int col_offset, PyArena *arena)
1835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!s) {
1838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field s is required for Str");
1840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Str_kind;
1846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Str.s = s;
1847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielAttribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
1854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel          col_offset, PyArena *arena)
1855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Attribute");
1860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!attr) {
1863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field attr is required for Attribute");
1865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ctx) {
1868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field ctx is required for Attribute");
1870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Attribute_kind;
1876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Attribute.value = value;
1877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Attribute.attr = attr;
1878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Attribute.ctx = ctx;
1879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielSubscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
1886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel          col_offset, PyArena *arena)
1887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
1890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Subscript");
1892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!slice) {
1895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field slice is required for Subscript");
1897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ctx) {
1900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field ctx is required for Subscript");
1902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Subscript_kind;
1908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Subscript.value = value;
1909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Subscript.slice = slice;
1910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Subscript.ctx = ctx;
1911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielName(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena
1918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     *arena)
1919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!id) {
1922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field id is required for Name");
1924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ctx) {
1927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field ctx is required for Name");
1929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Name_kind;
1935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Name.id = id;
1936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Name.ctx = ctx;
1937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielList(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
1944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel     *arena)
1945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ctx) {
1948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field ctx is required for List");
1950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = List_kind;
1956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.List.elts = elts;
1957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.List.ctx = ctx;
1958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexpr_ty
1964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielTuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
1965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel      *arena)
1966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty p;
1968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!ctx) {
1969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
1970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field ctx is required for Tuple");
1971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
1973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
1974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Tuple_kind;
1977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Tuple.elts = elts;
1978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Tuple.ctx = ctx;
1979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
1980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
1981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielslice_ty
1985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielEllipsis(PyArena *arena)
1986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_ty p;
1988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
1989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
1990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
1991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Ellipsis_kind;
1992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
1993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
1994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
1995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielslice_ty
1996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielSlice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
1997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
1998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_ty p;
1999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
2000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Slice_kind;
2003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Slice.lower = lower;
2004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Slice.upper = upper;
2005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Slice.step = step;
2006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielslice_ty
2010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielExtSlice(asdl_seq * dims, PyArena *arena)
2011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_ty p;
2013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
2014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = ExtSlice_kind;
2017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ExtSlice.dims = dims;
2018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielslice_ty
2022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielIndex(expr_ty value, PyArena *arena)
2023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_ty p;
2025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
2026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for Index");
2028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
2031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = Index_kind;
2034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.Index.value = value;
2035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielcomprehension_ty
2039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielcomprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
2040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        comprehension_ty p;
2042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!target) {
2043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field target is required for comprehension");
2045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!iter) {
2048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field iter is required for comprehension");
2050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
2053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->target = target;
2056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->iter = iter;
2057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->ifs = ifs;
2058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielexcepthandler_ty
2062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielExceptHandler(expr_ty type, expr_ty name, asdl_seq * body, int lineno, int
2063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel              col_offset, PyArena *arena)
2064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        excepthandler_ty p;
2066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
2067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kind = ExceptHandler_kind;
2070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ExceptHandler.type = type;
2071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ExceptHandler.name = name;
2072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->v.ExceptHandler.body = body;
2073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->lineno = lineno;
2074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->col_offset = col_offset;
2075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielarguments_ty
2079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielarguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
2080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel          defaults, PyArena *arena)
2081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        arguments_ty p;
2083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
2084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->args = args;
2087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->vararg = vararg;
2088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->kwarg = kwarg;
2089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->defaults = defaults;
2090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielkeyword_ty
2094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielkeyword(identifier arg, expr_ty value, PyArena *arena)
2095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        keyword_ty p;
2097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!arg) {
2098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field arg is required for keyword");
2100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) {
2103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field value is required for keyword");
2105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
2108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->arg = arg;
2111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->value = value;
2112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielalias_ty
2116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielalias(identifier name, identifier asname, PyArena *arena)
2117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        alias_ty p;
2119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!name) {
2120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_ValueError,
2121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                "field name is required for alias");
2122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
2125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!p)
2126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return NULL;
2127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->name = name;
2128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        p->asname = asname;
2129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return p;
2130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
2134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_mod(void* _o)
2135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        mod_ty o = (mod_ty)_o;
2137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
2138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
2139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
2140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
2141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch (o->kind) {
2144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Module_kind:
2145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Module_type, NULL, NULL);
2146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
2148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Interactive_kind:
2154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Interactive_type, NULL, NULL);
2155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
2157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Expression_kind:
2163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Expression_type, NULL, NULL);
2164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Expression.body);
2166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Suite_kind:
2172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Suite_type, NULL, NULL);
2173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
2175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
2182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
2183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
2184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
2185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
2186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
2189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_stmt(void* _o)
2190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        stmt_ty o = (stmt_ty)_o;
2192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
2193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
2194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
2195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
2196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch (o->kind) {
2199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case FunctionDef_kind:
2200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
2201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_identifier(o->v.FunctionDef.name);
2203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "name", value) == -1)
2205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_arguments(o->v.FunctionDef.args);
2208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "args", value) == -1)
2210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
2213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.FunctionDef.decorator_list,
2218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_expr);
2219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "decorator_list", value) ==
2221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                    -1)
2222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case ClassDef_kind:
2226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(ClassDef_type, NULL, NULL);
2227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_identifier(o->v.ClassDef.name);
2229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "name", value) == -1)
2231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
2234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "bases", value) == -1)
2236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
2239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ClassDef.decorator_list,
2244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_expr);
2245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "decorator_list", value) ==
2247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                    -1)
2248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Return_kind:
2252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Return_type, NULL, NULL);
2253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Return.value);
2255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Delete_kind:
2261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Delete_type, NULL, NULL);
2262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
2264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "targets", value) == -1)
2266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Assign_kind:
2270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Assign_type, NULL, NULL);
2271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
2273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "targets", value) == -1)
2275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Assign.value);
2278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case AugAssign_kind:
2284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(AugAssign_type, NULL, NULL);
2285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.AugAssign.target);
2287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "target", value) == -1)
2289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_operator(o->v.AugAssign.op);
2292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "op", value) == -1)
2294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.AugAssign.value);
2297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Print_kind:
2303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Print_type, NULL, NULL);
2304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Print.dest);
2306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "dest", value) == -1)
2308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Print.values, ast2obj_expr);
2311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "values", value) == -1)
2313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_bool(o->v.Print.nl);
2316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "nl", value) == -1)
2318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case For_kind:
2322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(For_type, NULL, NULL);
2323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.For.target);
2325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "target", value) == -1)
2327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.For.iter);
2330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "iter", value) == -1)
2332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.For.body, ast2obj_stmt);
2335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
2340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "orelse", value) == -1)
2342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case While_kind:
2346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(While_type, NULL, NULL);
2347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.While.test);
2349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "test", value) == -1)
2351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.While.body, ast2obj_stmt);
2354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
2359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "orelse", value) == -1)
2361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case If_kind:
2365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(If_type, NULL, NULL);
2366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.If.test);
2368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "test", value) == -1)
2370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.If.body, ast2obj_stmt);
2373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
2378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "orelse", value) == -1)
2380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case With_kind:
2384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(With_type, NULL, NULL);
2385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.With.context_expr);
2387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "context_expr", value) == -1)
2389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.With.optional_vars);
2392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "optional_vars", value) ==
2394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                    -1)
2395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.With.body, ast2obj_stmt);
2398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Raise_kind:
2404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Raise_type, NULL, NULL);
2405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Raise.type);
2407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "type", value) == -1)
2409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Raise.inst);
2412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "inst", value) == -1)
2414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Raise.tback);
2417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "tback", value) == -1)
2419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case TryExcept_kind:
2423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(TryExcept_type, NULL, NULL);
2424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.TryExcept.body, ast2obj_stmt);
2426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.TryExcept.handlers,
2431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_excepthandler);
2432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "handlers", value) == -1)
2434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.TryExcept.orelse, ast2obj_stmt);
2437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "orelse", value) == -1)
2439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case TryFinally_kind:
2443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(TryFinally_type, NULL, NULL);
2444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.TryFinally.body, ast2obj_stmt);
2446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.TryFinally.finalbody, ast2obj_stmt);
2451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "finalbody", value) == -1)
2453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Assert_kind:
2457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Assert_type, NULL, NULL);
2458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Assert.test);
2460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "test", value) == -1)
2462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Assert.msg);
2465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "msg", value) == -1)
2467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Import_kind:
2471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Import_type, NULL, NULL);
2472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Import.names, ast2obj_alias);
2474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "names", value) == -1)
2476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case ImportFrom_kind:
2480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
2481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_identifier(o->v.ImportFrom.module);
2483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "module", value) == -1)
2485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
2488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "names", value) == -1)
2490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_int(o->v.ImportFrom.level);
2493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "level", value) == -1)
2495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Exec_kind:
2499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Exec_type, NULL, NULL);
2500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Exec.body);
2502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Exec.globals);
2507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "globals", value) == -1)
2509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Exec.locals);
2512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "locals", value) == -1)
2514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Global_kind:
2518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Global_type, NULL, NULL);
2519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
2521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "names", value) == -1)
2523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Expr_kind:
2527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Expr_type, NULL, NULL);
2528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Expr.value);
2530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Pass_kind:
2536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Pass_type, NULL, NULL);
2537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Break_kind:
2540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Break_type, NULL, NULL);
2541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Continue_kind:
2544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Continue_type, NULL, NULL);
2545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->lineno);
2549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
2550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "lineno", value) < 0)
2551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
2552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
2553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->col_offset);
2554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
2555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "col_offset", value) < 0)
2556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
2557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
2558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
2559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
2560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
2561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
2562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
2563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
2566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_expr(void* _o)
2567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty o = (expr_ty)_o;
2569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
2570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
2571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
2572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
2573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch (o->kind) {
2576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case BoolOp_kind:
2577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(BoolOp_type, NULL, NULL);
2578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_boolop(o->v.BoolOp.op);
2580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "op", value) == -1)
2582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
2585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "values", value) == -1)
2587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case BinOp_kind:
2591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(BinOp_type, NULL, NULL);
2592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.BinOp.left);
2594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "left", value) == -1)
2596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_operator(o->v.BinOp.op);
2599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "op", value) == -1)
2601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.BinOp.right);
2604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "right", value) == -1)
2606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case UnaryOp_kind:
2610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
2611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_unaryop(o->v.UnaryOp.op);
2613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "op", value) == -1)
2615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.UnaryOp.operand);
2618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "operand", value) == -1)
2620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Lambda_kind:
2624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Lambda_type, NULL, NULL);
2625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_arguments(o->v.Lambda.args);
2627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "args", value) == -1)
2629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Lambda.body);
2632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case IfExp_kind:
2638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(IfExp_type, NULL, NULL);
2639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.IfExp.test);
2641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "test", value) == -1)
2643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.IfExp.body);
2646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
2648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.IfExp.orelse);
2651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "orelse", value) == -1)
2653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Dict_kind:
2657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Dict_type, NULL, NULL);
2658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
2660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "keys", value) == -1)
2662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
2665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "values", value) == -1)
2667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Set_kind:
2671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Set_type, NULL, NULL);
2672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
2674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elts", value) == -1)
2676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case ListComp_kind:
2680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(ListComp_type, NULL, NULL);
2681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.ListComp.elt);
2683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elt", value) == -1)
2685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ListComp.generators,
2688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_comprehension);
2689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "generators", value) == -1)
2691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case SetComp_kind:
2695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(SetComp_type, NULL, NULL);
2696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.SetComp.elt);
2698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elt", value) == -1)
2700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.SetComp.generators,
2703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_comprehension);
2704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "generators", value) == -1)
2706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case DictComp_kind:
2710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(DictComp_type, NULL, NULL);
2711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.DictComp.key);
2713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "key", value) == -1)
2715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.DictComp.value);
2718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.DictComp.generators,
2723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_comprehension);
2724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "generators", value) == -1)
2726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case GeneratorExp_kind:
2730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
2731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.GeneratorExp.elt);
2733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elt", value) == -1)
2735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.GeneratorExp.generators,
2738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     ast2obj_comprehension);
2739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "generators", value) == -1)
2741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Yield_kind:
2745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Yield_type, NULL, NULL);
2746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Yield.value);
2748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Compare_kind:
2754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Compare_type, NULL, NULL);
2755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Compare.left);
2757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "left", value) == -1)
2759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                {
2762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int i, n = asdl_seq_LEN(o->v.Compare.ops);
2763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        value = PyList_New(n);
2764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!value) goto failed;
2765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for(i = 0; i < n; i++)
2766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
2767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
2768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ops", value) == -1)
2770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
2773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "comparators", value) == -1)
2775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Call_kind:
2779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Call_type, NULL, NULL);
2780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Call.func);
2782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "func", value) == -1)
2784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Call.args, ast2obj_expr);
2787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "args", value) == -1)
2789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
2792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "keywords", value) == -1)
2794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Call.starargs);
2797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "starargs", value) == -1)
2799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Call.kwargs);
2802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "kwargs", value) == -1)
2804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Repr_kind:
2808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Repr_type, NULL, NULL);
2809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Repr.value);
2811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Num_kind:
2817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Num_type, NULL, NULL);
2818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_object(o->v.Num.n);
2820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "n", value) == -1)
2822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Str_kind:
2826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Str_type, NULL, NULL);
2827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_string(o->v.Str.s);
2829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "s", value) == -1)
2831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Attribute_kind:
2835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Attribute_type, NULL, NULL);
2836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Attribute.value);
2838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_identifier(o->v.Attribute.attr);
2843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "attr", value) == -1)
2845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr_context(o->v.Attribute.ctx);
2848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ctx", value) == -1)
2850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Subscript_kind:
2854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Subscript_type, NULL, NULL);
2855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Subscript.value);
2857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
2859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_slice(o->v.Subscript.slice);
2862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "slice", value) == -1)
2864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr_context(o->v.Subscript.ctx);
2867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ctx", value) == -1)
2869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Name_kind:
2873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Name_type, NULL, NULL);
2874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_identifier(o->v.Name.id);
2876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "id", value) == -1)
2878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr_context(o->v.Name.ctx);
2881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ctx", value) == -1)
2883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case List_kind:
2887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(List_type, NULL, NULL);
2888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.List.elts, ast2obj_expr);
2890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elts", value) == -1)
2892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr_context(o->v.List.ctx);
2895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ctx", value) == -1)
2897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Tuple_kind:
2901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Tuple_type, NULL, NULL);
2902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
2904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "elts", value) == -1)
2906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr_context(o->v.Tuple.ctx);
2909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "ctx", value) == -1)
2911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->lineno);
2916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
2917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "lineno", value) < 0)
2918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
2919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
2920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->col_offset);
2921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
2922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "col_offset", value) < 0)
2923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
2924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
2925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
2926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
2927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
2928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
2929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
2930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* ast2obj_expr_context(expr_context_ty o)
2933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch(o) {
2935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Load:
2936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Load_singleton);
2937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Load_singleton;
2938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Store:
2939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Store_singleton);
2940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Store_singleton;
2941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Del:
2942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Del_singleton);
2943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Del_singleton;
2944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case AugLoad:
2945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(AugLoad_singleton);
2946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return AugLoad_singleton;
2947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case AugStore:
2948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(AugStore_singleton);
2949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return AugStore_singleton;
2950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Param:
2951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Param_singleton);
2952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Param_singleton;
2953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                default:
2954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        /* should never happen, but just in case ... */
2955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_SystemError, "unknown expr_context found");
2956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NULL;
2957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
2959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
2960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_slice(void* _o)
2961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
2962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        slice_ty o = (slice_ty)_o;
2963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
2964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
2965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
2966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
2967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
2968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
2969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch (o->kind) {
2970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Ellipsis_kind:
2971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
2972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Slice_kind:
2975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Slice_type, NULL, NULL);
2976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Slice.lower);
2978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "lower", value) == -1)
2980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Slice.upper);
2983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "upper", value) == -1)
2985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Slice.step);
2988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "step", value) == -1)
2990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
2991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
2992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
2993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case ExtSlice_kind:
2994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
2995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
2996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
2997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
2998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "dims", value) == -1)
2999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
3000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
3001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
3002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case Index_kind:
3003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(Index_type, NULL, NULL);
3004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
3005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.Index.value);
3006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
3007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "value", value) == -1)
3008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
3009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
3010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
3011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* ast2obj_boolop(boolop_ty o)
3020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch(o) {
3022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case And:
3023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(And_singleton);
3024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return And_singleton;
3025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Or:
3026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Or_singleton);
3027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Or_singleton;
3028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                default:
3029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        /* should never happen, but just in case ... */
3030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_SystemError, "unknown boolop found");
3031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NULL;
3032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* ast2obj_operator(operator_ty o)
3035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch(o) {
3037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Add:
3038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Add_singleton);
3039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Add_singleton;
3040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Sub:
3041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Sub_singleton);
3042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Sub_singleton;
3043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Mult:
3044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Mult_singleton);
3045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Mult_singleton;
3046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Div:
3047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Div_singleton);
3048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Div_singleton;
3049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Mod:
3050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Mod_singleton);
3051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Mod_singleton;
3052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Pow:
3053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Pow_singleton);
3054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Pow_singleton;
3055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case LShift:
3056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(LShift_singleton);
3057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return LShift_singleton;
3058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case RShift:
3059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(RShift_singleton);
3060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return RShift_singleton;
3061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case BitOr:
3062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(BitOr_singleton);
3063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return BitOr_singleton;
3064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case BitXor:
3065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(BitXor_singleton);
3066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return BitXor_singleton;
3067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case BitAnd:
3068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(BitAnd_singleton);
3069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return BitAnd_singleton;
3070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case FloorDiv:
3071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(FloorDiv_singleton);
3072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return FloorDiv_singleton;
3073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                default:
3074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        /* should never happen, but just in case ... */
3075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_SystemError, "unknown operator found");
3076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NULL;
3077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* ast2obj_unaryop(unaryop_ty o)
3080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch(o) {
3082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Invert:
3083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Invert_singleton);
3084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Invert_singleton;
3085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Not:
3086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Not_singleton);
3087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Not_singleton;
3088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case UAdd:
3089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(UAdd_singleton);
3090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return UAdd_singleton;
3091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case USub:
3092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(USub_singleton);
3093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return USub_singleton;
3094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                default:
3095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        /* should never happen, but just in case ... */
3096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_SystemError, "unknown unaryop found");
3097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NULL;
3098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* ast2obj_cmpop(cmpop_ty o)
3101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch(o) {
3103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Eq:
3104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Eq_singleton);
3105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Eq_singleton;
3106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case NotEq:
3107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(NotEq_singleton);
3108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NotEq_singleton;
3109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Lt:
3110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Lt_singleton);
3111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Lt_singleton;
3112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case LtE:
3113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(LtE_singleton);
3114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return LtE_singleton;
3115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Gt:
3116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Gt_singleton);
3117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Gt_singleton;
3118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case GtE:
3119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(GtE_singleton);
3120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return GtE_singleton;
3121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case Is:
3122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(Is_singleton);
3123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return Is_singleton;
3124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case IsNot:
3125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(IsNot_singleton);
3126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return IsNot_singleton;
3127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case In:
3128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(In_singleton);
3129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return In_singleton;
3130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                case NotIn:
3131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_INCREF(NotIn_singleton);
3132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NotIn_singleton;
3133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                default:
3134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        /* should never happen, but just in case ... */
3135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_SystemError, "unknown cmpop found");
3136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return NULL;
3137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
3140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_comprehension(void* _o)
3141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        comprehension_ty o = (comprehension_ty)_o;
3143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
3144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
3145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
3146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
3147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        result = PyType_GenericNew(comprehension_type, NULL, NULL);
3150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!result) return NULL;
3151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_expr(o->target);
3152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "target", value) == -1)
3154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_expr(o->iter);
3157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "iter", value) == -1)
3159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_list(o->ifs, ast2obj_expr);
3162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "ifs", value) == -1)
3164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
3174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_excepthandler(void* _o)
3175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        excepthandler_ty o = (excepthandler_ty)_o;
3177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
3178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
3179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
3180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
3181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        switch (o->kind) {
3184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        case ExceptHandler_kind:
3185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
3186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!result) goto failed;
3187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.ExceptHandler.type);
3188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
3189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "type", value) == -1)
3190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
3191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
3192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_expr(o->v.ExceptHandler.name);
3193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
3194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "name", value) == -1)
3195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
3196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
3197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
3198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!value) goto failed;
3199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_SetAttrString(result, "body", value) == -1)
3200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
3201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_DECREF(value);
3202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                break;
3203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->lineno);
3205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "lineno", value) < 0)
3207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_int(o->col_offset);
3210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "col_offset", value) < 0)
3212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
3222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_arguments(void* _o)
3223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        arguments_ty o = (arguments_ty)_o;
3225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
3226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
3227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
3228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
3229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        result = PyType_GenericNew(arguments_type, NULL, NULL);
3232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!result) return NULL;
3233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_list(o->args, ast2obj_expr);
3234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "args", value) == -1)
3236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_identifier(o->vararg);
3239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "vararg", value) == -1)
3241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_identifier(o->kwarg);
3244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "kwarg", value) == -1)
3246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_list(o->defaults, ast2obj_expr);
3249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "defaults", value) == -1)
3251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
3261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_keyword(void* _o)
3262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        keyword_ty o = (keyword_ty)_o;
3264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
3265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
3266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
3267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
3268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        result = PyType_GenericNew(keyword_type, NULL, NULL);
3271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!result) return NULL;
3272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_identifier(o->arg);
3273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "arg", value) == -1)
3275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_expr(o->value);
3278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "value", value) == -1)
3280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject*
3290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielast2obj_alias(void* _o)
3291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        alias_ty o = (alias_ty)_o;
3293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *result = NULL, *value = NULL;
3294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!o) {
3295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_INCREF(Py_None);
3296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return Py_None;
3297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        result = PyType_GenericNew(alias_type, NULL, NULL);
3300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!result) return NULL;
3301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_identifier(o->name);
3302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "name", value) == -1)
3304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        value = ast2obj_identifier(o->asname);
3307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!value) goto failed;
3308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_SetAttrString(result, "asname", value) == -1)
3309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                goto failed;
3310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_DECREF(value);
3311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return result;
3312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(value);
3314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(result);
3315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
3316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
3320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
3321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
3323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
3324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (obj == Py_None) {
3327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NULL;
3328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
3331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
3360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Module(body, arena);
3363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
3367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
3396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Interactive(body, arena);
3399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
3403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty body;
3408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &body, arena);
3414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
3419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Expression(body, arena);
3422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
3426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
3455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Suite(body, arena);
3458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
3463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
3464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %.400s", PyString_AS_STRING(tmp));
3465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
3466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
3467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
3468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
3469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
3471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
3472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
3473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
3474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
3475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int lineno;
3477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int col_offset;
3478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (obj == Py_None) {
3480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NULL;
3481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "lineno")) {
3484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
3485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "lineno");
3486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
3487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &lineno, arena);
3488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
3489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
3490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
3491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
3492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
3493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "col_offset")) {
3496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
3497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "col_offset");
3498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
3499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &col_offset, arena);
3500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
3501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
3502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
3503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
3504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
3505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
3508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                identifier name;
3513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                arguments_ty args;
3514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* decorator_list;
3516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "name")) {
3518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "name");
3520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_identifier(tmp, &name, arena);
3522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
3527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "args")) {
3530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "args");
3532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_arguments(tmp, &args, arena);
3534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
3539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
3564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "decorator_list")) {
3567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "decorator_list");
3571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        decorator_list = asdl_seq_new(len, arena);
3578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (decorator_list == NULL) goto failed;
3579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(decorator_list, i, value);
3584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
3589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = FunctionDef(name, args, body, decorator_list, lineno,
3592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                   col_offset, arena);
3593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
3597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                identifier name;
3602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* bases;
3603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* decorator_list;
3605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "name")) {
3607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "name");
3609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_identifier(tmp, &name, arena);
3611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
3616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "bases")) {
3619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "bases");
3623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        bases = asdl_seq_new(len, arena);
3630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (bases == NULL) goto failed;
3631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(bases, i, value);
3636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
3641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
3666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "decorator_list")) {
3669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "decorator_list");
3673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        decorator_list = asdl_seq_new(len, arena);
3680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (decorator_list == NULL) goto failed;
3681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(decorator_list, i, value);
3686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
3691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = ClassDef(name, bases, body, decorator_list, lineno,
3694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                col_offset, arena);
3695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
3699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
3704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
3706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
3708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
3710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        value = NULL;
3715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Return(value, lineno, col_offset, arena);
3717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
3721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* targets;
3726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "targets")) {
3728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "targets");
3732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        targets = asdl_seq_new(len, arena);
3739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (targets == NULL) goto failed;
3740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(targets, i, value);
3745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
3750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Delete(targets, lineno, col_offset, arena);
3753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
3757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* targets;
3762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
3763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "targets")) {
3765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "targets");
3769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        targets = asdl_seq_new(len, arena);
3776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (targets == NULL) goto failed;
3777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(targets, i, value);
3782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
3787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
3790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
3792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
3794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
3799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Assign(targets, value, lineno, col_offset, arena);
3802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
3806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty target;
3811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                operator_ty op;
3812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
3813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "target")) {
3815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "target");
3817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &target, arena);
3819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
3824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "op")) {
3827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "op");
3829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_operator(tmp, &op, arena);
3831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
3836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
3839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
3841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
3843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
3848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = AugAssign(target, op, value, lineno, col_offset, arena);
3851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Print_type);
3855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty dest;
3860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* values;
3861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                bool nl;
3862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "dest")) {
3864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "dest");
3866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &dest, arena);
3868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        dest = NULL;
3873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "values")) {
3875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "values");
3879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Print field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        values = asdl_seq_new(len, arena);
3886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (values == NULL) goto failed;
3887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
3889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
3890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(values, i, value);
3892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Print");
3897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "nl")) {
3900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "nl");
3902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_bool(tmp, &nl, arena);
3904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"nl\" missing from Print");
3909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Print(dest, values, nl, lineno, col_offset, arena);
3912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
3913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
3914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
3916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
3917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
3918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
3919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
3920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty target;
3921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty iter;
3922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
3923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* orelse;
3924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
3925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "target")) {
3926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "target");
3928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &target, arena);
3930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
3935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "iter")) {
3938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "iter");
3940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &iter, arena);
3942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
3943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
3947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
3950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
3954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
3961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
3962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
3967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
3972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "orelse")) {
3975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
3976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
3977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
3978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "orelse");
3979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
3980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
3981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
3982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
3983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
3985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        orelse = asdl_seq_new(len, arena);
3986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (orelse == NULL) goto failed;
3987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
3988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
3989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
3990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
3991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(orelse, i, value);
3992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
3993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
3994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
3995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
3996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
3997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
3998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
3999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = For(target, iter, body, orelse, lineno, col_offset,
4000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                           arena);
4001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
4005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty test;
4010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
4011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* orelse;
4012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "test")) {
4014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "test");
4016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &test, arena);
4018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
4023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
4037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
4038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
4043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
4048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "orelse")) {
4051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "orelse");
4055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        orelse = asdl_seq_new(len, arena);
4062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (orelse == NULL) goto failed;
4063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(orelse, i, value);
4068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
4073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = While(test, body, orelse, lineno, col_offset, arena);
4076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
4080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty test;
4085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
4086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* orelse;
4087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "test")) {
4089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "test");
4091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &test, arena);
4093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
4098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
4112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
4113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
4118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
4123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "orelse")) {
4126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "orelse");
4130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        orelse = asdl_seq_new(len, arena);
4137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (orelse == NULL) goto failed;
4138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(orelse, i, value);
4143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
4148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = If(test, body, orelse, lineno, col_offset, arena);
4151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
4155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty context_expr;
4160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty optional_vars;
4161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
4162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "context_expr")) {
4164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "context_expr");
4166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &context_expr, arena);
4168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from With");
4173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "optional_vars")) {
4176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "optional_vars");
4178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &optional_vars, arena);
4180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        optional_vars = NULL;
4185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
4198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
4199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
4204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
4209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = With(context_expr, optional_vars, body, lineno,
4212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                            col_offset, arena);
4213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
4217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty type;
4222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty inst;
4223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty tback;
4224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "type")) {
4226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "type");
4228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &type, arena);
4230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        type = NULL;
4235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "inst")) {
4237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "inst");
4239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &inst, arena);
4241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        inst = NULL;
4246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "tback")) {
4248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "tback");
4250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &tback, arena);
4252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tback = NULL;
4257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Raise(type, inst, tback, lineno, col_offset, arena);
4259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)TryExcept_type);
4263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
4268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* handlers;
4269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* orelse;
4270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "TryExcept field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
4283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
4284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
4289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from TryExcept");
4294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "handlers")) {
4297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "handlers");
4301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "TryExcept field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        handlers = asdl_seq_new(len, arena);
4308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (handlers == NULL) goto failed;
4309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                excepthandler_ty value;
4311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
4312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(handlers, i, value);
4314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from TryExcept");
4319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "orelse")) {
4322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "orelse");
4326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "TryExcept field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        orelse = asdl_seq_new(len, arena);
4333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (orelse == NULL) goto failed;
4334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(orelse, i, value);
4339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from TryExcept");
4344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = TryExcept(body, handlers, orelse, lineno, col_offset,
4347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                 arena);
4348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)TryFinally_type);
4352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
4357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* finalbody;
4358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "TryFinally field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
4371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
4372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
4377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from TryFinally");
4382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "finalbody")) {
4385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "finalbody");
4389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "TryFinally field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        finalbody = asdl_seq_new(len, arena);
4396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (finalbody == NULL) goto failed;
4397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
4399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
4400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(finalbody, i, value);
4402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from TryFinally");
4407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = TryFinally(body, finalbody, lineno, col_offset, arena);
4410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
4414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty test;
4419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty msg;
4420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "test")) {
4422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "test");
4424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &test, arena);
4426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
4431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "msg")) {
4434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "msg");
4436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &msg, arena);
4438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        msg = NULL;
4443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Assert(test, msg, lineno, col_offset, arena);
4445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
4449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* names;
4454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "names")) {
4456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "names");
4460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        names = asdl_seq_new(len, arena);
4467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (names == NULL) goto failed;
4468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                alias_ty value;
4470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(names, i, value);
4473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
4478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Import(names, lineno, col_offset, arena);
4481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
4485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                identifier module;
4490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* names;
4491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int level;
4492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "module")) {
4494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "module");
4496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_identifier(tmp, &module, arena);
4498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        module = NULL;
4503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "names")) {
4505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "names");
4509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        names = asdl_seq_new(len, arena);
4516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (names == NULL) goto failed;
4517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                alias_ty value;
4519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
4520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(names, i, value);
4522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
4527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "level")) {
4530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "level");
4532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_int(tmp, &level, arena);
4534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        level = 0;
4539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = ImportFrom(module, names, level, lineno, col_offset,
4541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                  arena);
4542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Exec_type);
4546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty body;
4551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty globals;
4552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty locals;
4553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &body, arena);
4559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Exec");
4564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "globals")) {
4567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "globals");
4569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &globals, arena);
4571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        globals = NULL;
4576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "locals")) {
4578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "locals");
4580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &locals, arena);
4582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        locals = NULL;
4587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Exec(body, globals, locals, lineno, col_offset, arena);
4589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
4593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* names;
4598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "names")) {
4600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "names");
4604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        names = asdl_seq_new(len, arena);
4611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (names == NULL) goto failed;
4612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                identifier value;
4614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
4615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(names, i, value);
4617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
4622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Global(names, lineno, col_offset, arena);
4625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
4629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
4634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
4636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
4638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
4640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
4645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Expr(value, lineno, col_offset, arena);
4648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
4652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Pass(lineno, col_offset, arena);
4658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
4662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Break(lineno, col_offset, arena);
4668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
4672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Continue(lineno, col_offset, arena);
4678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
4683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
4684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %.400s", PyString_AS_STRING(tmp));
4685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
4686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
4687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
4688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
4689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
4691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
4692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
4693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
4694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
4695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int lineno;
4697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int col_offset;
4698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (obj == Py_None) {
4700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NULL;
4701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "lineno")) {
4704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
4705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "lineno");
4706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
4707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &lineno, arena);
4708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
4709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
4710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
4711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
4712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
4713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "col_offset")) {
4716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
4717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "col_offset");
4718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
4719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &col_offset, arena);
4720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
4721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
4722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
4723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
4724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
4725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
4728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                boolop_ty op;
4733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* values;
4734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "op")) {
4736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "op");
4738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_boolop(tmp, &op, arena);
4740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
4745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "values")) {
4748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "values");
4752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        values = asdl_seq_new(len, arena);
4759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (values == NULL) goto failed;
4760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
4762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(values, i, value);
4765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
4770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = BoolOp(op, values, lineno, col_offset, arena);
4773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
4777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty left;
4782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                operator_ty op;
4783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty right;
4784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "left")) {
4786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "left");
4788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &left, arena);
4790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
4795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "op")) {
4798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "op");
4800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_operator(tmp, &op, arena);
4802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
4807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "right")) {
4810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "right");
4812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &right, arena);
4814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
4819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = BinOp(left, op, right, lineno, col_offset, arena);
4822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
4826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                unaryop_ty op;
4831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty operand;
4832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "op")) {
4834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "op");
4836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_unaryop(tmp, &op, arena);
4838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
4843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "operand")) {
4846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "operand");
4848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &operand, arena);
4850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
4855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = UnaryOp(op, operand, lineno, col_offset, arena);
4858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
4862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                arguments_ty args;
4867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty body;
4868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "args")) {
4870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "args");
4872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_arguments(tmp, &args, arena);
4874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
4879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &body, arena);
4886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
4891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Lambda(args, body, lineno, col_offset, arena);
4894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
4898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty test;
4903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty body;
4904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty orelse;
4905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "test")) {
4907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "test");
4909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &test, arena);
4911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
4916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
4919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
4921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &body, arena);
4923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
4928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "orelse")) {
4931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "orelse");
4933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &orelse, arena);
4935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
4936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
4940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = IfExp(test, body, orelse, lineno, col_offset, arena);
4943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
4944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
4945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
4947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
4948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
4949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
4950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
4951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* keys;
4952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* values;
4953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
4954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "keys")) {
4955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "keys");
4959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        keys = asdl_seq_new(len, arena);
4966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (keys == NULL) goto failed;
4967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
4969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(keys, i, value);
4972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
4975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
4976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
4977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
4978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
4979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "values")) {
4980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
4981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
4982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
4983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "values");
4984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
4985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
4986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
4987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
4988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
4990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        values = asdl_seq_new(len, arena);
4991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (values == NULL) goto failed;
4992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
4993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
4994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
4995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
4996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(values, i, value);
4997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
4998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
4999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
5002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Dict(keys, values, lineno, col_offset, arena);
5005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
5009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* elts;
5014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elts")) {
5016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elts");
5020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        elts = asdl_seq_new(len, arena);
5027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (elts == NULL) goto failed;
5028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
5030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(elts, i, value);
5033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
5038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Set(elts, lineno, col_offset, arena);
5041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
5045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty elt;
5050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* generators;
5051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elt")) {
5053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elt");
5055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &elt, arena);
5057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
5062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "generators")) {
5065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "generators");
5069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        generators = asdl_seq_new(len, arena);
5076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (generators == NULL) goto failed;
5077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                comprehension_ty value;
5079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(generators, i, value);
5082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
5087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = ListComp(elt, generators, lineno, col_offset, arena);
5090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
5094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty elt;
5099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* generators;
5100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elt")) {
5102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elt");
5104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &elt, arena);
5106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
5111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "generators")) {
5114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "generators");
5118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        generators = asdl_seq_new(len, arena);
5125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (generators == NULL) goto failed;
5126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                comprehension_ty value;
5128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(generators, i, value);
5131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
5136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = SetComp(elt, generators, lineno, col_offset, arena);
5139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
5143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty key;
5148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* generators;
5150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "key")) {
5152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "key");
5154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &key, arena);
5156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
5161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
5173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "generators")) {
5176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "generators");
5180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        generators = asdl_seq_new(len, arena);
5187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (generators == NULL) goto failed;
5188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                comprehension_ty value;
5190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(generators, i, value);
5193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
5198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = DictComp(key, value, generators, lineno, col_offset,
5201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                arena);
5202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
5206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty elt;
5211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* generators;
5212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elt")) {
5214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elt");
5216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &elt, arena);
5218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
5223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "generators")) {
5226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "generators");
5230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        generators = asdl_seq_new(len, arena);
5237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (generators == NULL) goto failed;
5238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                comprehension_ty value;
5240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
5241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(generators, i, value);
5243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
5248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = GeneratorExp(elt, generators, lineno, col_offset, arena);
5251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
5255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        value = NULL;
5271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Yield(value, lineno, col_offset, arena);
5273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
5277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty left;
5282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_int_seq* ops;
5283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* comparators;
5284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "left")) {
5286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "left");
5288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &left, arena);
5290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
5295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ops")) {
5298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ops");
5302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        ops = asdl_int_seq_new(len, arena);
5309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (ops == NULL) goto failed;
5310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                cmpop_ty value;
5312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
5313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(ops, i, value);
5315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
5320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "comparators")) {
5323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "comparators");
5327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        comparators = asdl_seq_new(len, arena);
5334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (comparators == NULL) goto failed;
5335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
5337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(comparators, i, value);
5340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
5345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Compare(left, ops, comparators, lineno, col_offset,
5348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                               arena);
5349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
5353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty func;
5358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* args;
5359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* keywords;
5360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty starargs;
5361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty kwargs;
5362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "func")) {
5364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "func");
5366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &func, arena);
5368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
5373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "args")) {
5376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "args");
5380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        args = asdl_seq_new(len, arena);
5387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (args == NULL) goto failed;
5388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
5390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(args, i, value);
5393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
5398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "keywords")) {
5401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "keywords");
5405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        keywords = asdl_seq_new(len, arena);
5412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (keywords == NULL) goto failed;
5413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                keyword_ty value;
5415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
5416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(keywords, i, value);
5418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
5423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "starargs")) {
5426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "starargs");
5428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &starargs, arena);
5430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        starargs = NULL;
5435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "kwargs")) {
5437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "kwargs");
5439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &kwargs, arena);
5441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        kwargs = NULL;
5446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Call(func, args, keywords, starargs, kwargs, lineno,
5448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                            col_offset, arena);
5449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Repr_type);
5453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Repr");
5469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Repr(value, lineno, col_offset, arena);
5472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Num_type);
5476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                object n;
5481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "n")) {
5483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "n");
5485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_object(tmp, &n, arena);
5487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"n\" missing from Num");
5492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Num(n, lineno, col_offset, arena);
5495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Str_type);
5499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                string s;
5504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "s")) {
5506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "s");
5508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_string(tmp, &s, arena);
5510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Str");
5515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Str(s, lineno, col_offset, arena);
5518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
5522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                identifier attr;
5528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_context_ty ctx;
5529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
5540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "attr")) {
5543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "attr");
5545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_identifier(tmp, &attr, arena);
5547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
5552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ctx")) {
5555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ctx");
5557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr_context(tmp, &ctx, arena);
5559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
5564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Attribute(value, attr, ctx, lineno, col_offset, arena);
5567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
5571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                slice_ty slice;
5577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_context_ty ctx;
5578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
5589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "slice")) {
5592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "slice");
5594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_slice(tmp, &slice, arena);
5596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
5601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ctx")) {
5604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ctx");
5606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr_context(tmp, &ctx, arena);
5608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
5613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Subscript(value, slice, ctx, lineno, col_offset, arena);
5616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
5620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                identifier id;
5625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_context_ty ctx;
5626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "id")) {
5628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "id");
5630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_identifier(tmp, &id, arena);
5632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
5637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ctx")) {
5640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ctx");
5642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr_context(tmp, &ctx, arena);
5644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
5649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Name(id, ctx, lineno, col_offset, arena);
5652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
5656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* elts;
5661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_context_ty ctx;
5662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elts")) {
5664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elts");
5668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        elts = asdl_seq_new(len, arena);
5675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (elts == NULL) goto failed;
5676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
5678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(elts, i, value);
5681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
5686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ctx")) {
5689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ctx");
5691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr_context(tmp, &ctx, arena);
5693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
5698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = List(elts, ctx, lineno, col_offset, arena);
5701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
5705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* elts;
5710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_context_ty ctx;
5711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "elts")) {
5713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "elts");
5717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        elts = asdl_seq_new(len, arena);
5724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (elts == NULL) goto failed;
5725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                expr_ty value;
5727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
5728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(elts, i, value);
5730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
5735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "ctx")) {
5738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "ctx");
5740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr_context(tmp, &ctx, arena);
5742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
5747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Tuple(elts, ctx, lineno, col_offset, arena);
5750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
5755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
5756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %.400s", PyString_AS_STRING(tmp));
5757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
5758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
5759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
5760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
5761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
5763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
5764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
5765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
5766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
5767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
5769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Load;
5774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
5777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Store;
5782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
5785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5789c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Del;
5790c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5791c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5792c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
5793c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5794c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5795c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5796c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5797c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = AugLoad;
5798c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5799c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5800c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
5801c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5802c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5803c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5804c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5805c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = AugStore;
5806c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5807c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5808c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
5809c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5810c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5811c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5812c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5813c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Param;
5814c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5815c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5816c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5817c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
5818c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
5819c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %.400s", PyString_AS_STRING(tmp));
5820c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
5821c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
5822c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
5823c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
5824c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5825c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
5826c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
5827c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
5828c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
5829c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
5830c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5831c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5832c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (obj == Py_None) {
5833c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NULL;
5834c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5835c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5836c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type);
5837c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5838c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5839c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5840c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5841c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5842c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Ellipsis(arena);
5843c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5844c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5845c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5846c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
5847c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5848c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5849c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5850c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5851c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty lower;
5852c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty upper;
5853c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty step;
5854c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5855c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "lower")) {
5856c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5857c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "lower");
5858c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5859c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &lower, arena);
5860c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5861c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5862c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5863c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5864c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        lower = NULL;
5865c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5866c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "upper")) {
5867c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5868c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "upper");
5869c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5870c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &upper, arena);
5871c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5872c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5873c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5874c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5875c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        upper = NULL;
5876c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5877c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "step")) {
5878c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5879c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "step");
5880c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5881c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &step, arena);
5882c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5883c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5884c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5885c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5886c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        step = NULL;
5887c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5888c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Slice(lower, upper, step, arena);
5889c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5890c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5891c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5892c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
5893c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5894c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5895c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5896c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5897c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* dims;
5898c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5899c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "dims")) {
5900c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5901c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
5902c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
5903c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "dims");
5904c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5905c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
5906c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
5907c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
5908c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5909c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
5910c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        dims = asdl_seq_new(len, arena);
5911c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (dims == NULL) goto failed;
5912c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
5913c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                slice_ty value;
5914c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
5915c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
5916c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(dims, i, value);
5917c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
5918c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5919c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5920c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5921c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
5922c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5923c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5924c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = ExtSlice(dims, arena);
5925c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5926c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5927c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5928c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
5929c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5930c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5931c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5932c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5933c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty value;
5934c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5935c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "value")) {
5936c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
5937c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "value");
5938c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
5939c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &value, arena);
5940c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
5941c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
5942c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
5943c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
5944c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
5945c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
5946c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
5947c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Index(value, arena);
5948c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
5949c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5950c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5951c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5952c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
5953c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
5954c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %.400s", PyString_AS_STRING(tmp));
5955c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
5956c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
5957c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
5958c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
5959c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5960c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
5961c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
5962c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
5963c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
5964c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
5965c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5966c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
5967c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5968c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5969c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5970c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5971c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = And;
5972c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5973c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5974c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
5975c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5976c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
5977c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5978c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
5979c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Or;
5980c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
5981c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
5982c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5983c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
5984c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
5985c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %.400s", PyString_AS_STRING(tmp));
5986c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
5987c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
5988c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
5989c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
5990c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5991c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
5992c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
5993c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
5994c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
5995c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
5996c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
5997c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
5998c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
5999c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6000c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6001c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6002c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Add;
6003c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6004c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6005c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
6006c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6007c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6008c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6009c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6010c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Sub;
6011c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6012c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6013c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
6014c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6015c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6016c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6017c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6018c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Mult;
6019c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6020c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6021c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
6022c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6023c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6024c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6025c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6026c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Div;
6027c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6028c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6029c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
6030c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6031c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6032c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6033c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6034c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Mod;
6035c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6036c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6037c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
6038c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6039c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6040c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6041c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6042c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Pow;
6043c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6044c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6045c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
6046c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6047c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6048c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6049c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6050c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = LShift;
6051c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6052c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6053c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
6054c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6055c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6056c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6057c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6058c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = RShift;
6059c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6060c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6061c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
6062c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6063c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6064c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6065c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6066c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = BitOr;
6067c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6068c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6069c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
6070c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6071c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6072c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6073c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6074c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = BitXor;
6075c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6076c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6077c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
6078c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6079c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6080c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6081c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6082c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = BitAnd;
6083c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6084c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6085c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
6086c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6087c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6088c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6089c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6090c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = FloorDiv;
6091c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6092c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6093c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6094c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
6095c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
6096c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %.400s", PyString_AS_STRING(tmp));
6097c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6098c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6099c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6100c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6101c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6102c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6103c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
6104c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6105c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6106c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
6107c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6108c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
6109c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6110c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6111c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6112c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6113c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Invert;
6114c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6115c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6116c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
6117c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6118c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6119c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6120c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6121c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Not;
6122c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6123c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6124c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
6125c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6126c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6127c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6128c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6129c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = UAdd;
6130c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6131c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6132c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
6133c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6134c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6135c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6136c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6137c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = USub;
6138c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6139c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6140c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6141c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
6142c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
6143c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %.400s", PyString_AS_STRING(tmp));
6144c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6145c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6146c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6147c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6148c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6149c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6150c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
6151c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6152c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6153c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
6154c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6155c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
6156c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6157c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6158c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6159c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6160c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Eq;
6161c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6162c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6163c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
6164c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6165c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6166c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6167c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6168c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NotEq;
6169c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6170c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6171c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
6172c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6173c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6174c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6175c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6176c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Lt;
6177c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6178c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6179c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
6180c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6181c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6182c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6183c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6184c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = LtE;
6185c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6186c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6187c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
6188c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6189c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6190c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6191c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6192c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Gt;
6193c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6194c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6195c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
6196c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6197c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6198c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6199c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6200c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = GtE;
6201c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6202c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6203c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
6204c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6205c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6206c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6207c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6208c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = Is;
6209c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6210c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6211c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
6212c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6213c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6214c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6215c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6216c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = IsNot;
6217c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6218c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6219c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
6220c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6221c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6222c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6223c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6224c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = In;
6225c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6226c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6227c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
6228c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6229c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6230c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6231c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6232c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NotIn;
6233c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6234c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6235c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6236c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
6237c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
6238c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %.400s", PyString_AS_STRING(tmp));
6239c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6240c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6241c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6242c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6243c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6244c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6245c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
6246c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6247c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6248c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty target;
6249c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty iter;
6250c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        asdl_seq* ifs;
6251c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6252c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "target")) {
6253c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6254c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "target");
6255c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6256c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_expr(tmp, &target, arena);
6257c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6258c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6259c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6260c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6261c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
6262c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6263c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6264c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "iter")) {
6265c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6266c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "iter");
6267c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6268c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_expr(tmp, &iter, arena);
6269c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6270c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6271c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6272c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6273c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
6274c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6275c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6276c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "ifs")) {
6277c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6278c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t len;
6279c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t i;
6280c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "ifs");
6281c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6282c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!PyList_Check(tmp)) {
6283c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6284c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
6285c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6286c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                len = PyList_GET_SIZE(tmp);
6287c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                ifs = asdl_seq_new(len, arena);
6288c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (ifs == NULL) goto failed;
6289c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                for (i = 0; i < len; i++) {
6290c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        expr_ty value;
6291c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6292c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
6293c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        asdl_seq_SET(ifs, i, value);
6294c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6295c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6296c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6297c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6298c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
6299c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6300c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6301c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *out = comprehension(target, iter, ifs, arena);
6302c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 0;
6303c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6304c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6305c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6306c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6307c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6308c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6309c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
6310c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6311c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6312c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int isinstance;
6313c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6314c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int lineno;
6315c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        int col_offset;
6316c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6317c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (obj == Py_None) {
6318c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = NULL;
6319c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6320c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6321c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "lineno")) {
6322c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6323c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "lineno");
6324c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6325c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &lineno, arena);
6326c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6327c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6328c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6329c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6330c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
6331c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6332c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6333c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "col_offset")) {
6334c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6335c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "col_offset");
6336c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6337c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_int(tmp, &col_offset, arena);
6338c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6339c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6340c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6341c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6342c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
6343c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6344c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6345c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
6346c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance == -1) {
6347c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6348c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6349c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (isinstance) {
6350c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty type;
6351c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                expr_ty name;
6352c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asdl_seq* body;
6353c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6354c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "type")) {
6355c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
6356c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "type");
6357c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
6358c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &type, arena);
6359c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
6360c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
6361c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
6362c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
6363c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        type = NULL;
6364c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6365c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "name")) {
6366c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
6367c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "name");
6368c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
6369c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(tmp, &name, arena);
6370c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
6371c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
6372c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
6373c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
6374c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        name = NULL;
6375c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6376c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (PyObject_HasAttrString(obj, "body")) {
6377c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        int res;
6378c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t len;
6379c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_ssize_t i;
6380c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = PyObject_GetAttrString(obj, "body");
6381c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (tmp == NULL) goto failed;
6382c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (!PyList_Check(tmp)) {
6383c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6384c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                goto failed;
6385c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
6386c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        len = PyList_GET_SIZE(tmp);
6387c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        body = asdl_seq_new(len, arena);
6388c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (body == NULL) goto failed;
6389c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        for (i = 0; i < len; i++) {
6390c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                stmt_ty value;
6391c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
6392c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                if (res != 0) goto failed;
6393c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                asdl_seq_SET(body, i, value);
6394c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        }
6395c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        Py_XDECREF(tmp);
6396c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        tmp = NULL;
6397c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                } else {
6398c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
6399c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        return 1;
6400c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6401c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                *out = ExceptHandler(type, name, body, lineno, col_offset,
6402c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                                     arena);
6403c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (*out == NULL) goto failed;
6404c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 0;
6405c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6406c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6407c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        tmp = PyObject_Repr(obj);
6408c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (tmp == NULL) goto failed;
6409c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %.400s", PyString_AS_STRING(tmp));
6410c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6411c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6412c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6413c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6414c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6415c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6416c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
6417c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6418c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6419c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        asdl_seq* args;
6420c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        identifier vararg;
6421c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        identifier kwarg;
6422c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        asdl_seq* defaults;
6423c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6424c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "args")) {
6425c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6426c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t len;
6427c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t i;
6428c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "args");
6429c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6430c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!PyList_Check(tmp)) {
6431c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6432c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
6433c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6434c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                len = PyList_GET_SIZE(tmp);
6435c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                args = asdl_seq_new(len, arena);
6436c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (args == NULL) goto failed;
6437c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                for (i = 0; i < len; i++) {
6438c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        expr_ty value;
6439c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6440c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
6441c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        asdl_seq_SET(args, i, value);
6442c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6443c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6444c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6445c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6446c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
6447c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6448c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6449c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "vararg")) {
6450c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6451c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "vararg");
6452c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6453c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_identifier(tmp, &vararg, arena);
6454c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6455c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6456c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6457c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6458c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                vararg = NULL;
6459c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6460c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "kwarg")) {
6461c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6462c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "kwarg");
6463c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6464c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_identifier(tmp, &kwarg, arena);
6465c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6466c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6467c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6468c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6469c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                kwarg = NULL;
6470c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6471c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "defaults")) {
6472c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6473c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t len;
6474c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_ssize_t i;
6475c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "defaults");
6476c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6477c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (!PyList_Check(tmp)) {
6478c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
6479c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        goto failed;
6480c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6481c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                len = PyList_GET_SIZE(tmp);
6482c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                defaults = asdl_seq_new(len, arena);
6483c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (defaults == NULL) goto failed;
6484c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                for (i = 0; i < len; i++) {
6485c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        expr_ty value;
6486c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
6487c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        if (res != 0) goto failed;
6488c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                        asdl_seq_SET(defaults, i, value);
6489c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                }
6490c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6491c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6492c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6493c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
6494c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6495c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6496c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *out = arguments(args, vararg, kwarg, defaults, arena);
6497c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 0;
6498c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6499c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6500c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6501c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6502c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6503c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6504c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
6505c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6506c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6507c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        identifier arg;
6508c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        expr_ty value;
6509c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6510c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "arg")) {
6511c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6512c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "arg");
6513c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6514c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_identifier(tmp, &arg, arena);
6515c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6516c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6517c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6518c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6519c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from keyword");
6520c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6521c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6522c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "value")) {
6523c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6524c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "value");
6525c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6526c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_expr(tmp, &value, arena);
6527c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6528c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6529c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6530c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6531c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
6532c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6533c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6534c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *out = keyword(arg, value, arena);
6535c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 0;
6536c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6537c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6538c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6539c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6540c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6541c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint
6542c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielobj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
6543c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6544c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject* tmp = NULL;
6545c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        identifier name;
6546c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        identifier asname;
6547c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6548c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "name")) {
6549c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6550c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "name");
6551c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6552c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_identifier(tmp, &name, arena);
6553c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6554c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6555c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6556c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6557c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
6558c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return 1;
6559c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6560c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyObject_HasAttrString(obj, "asname")) {
6561c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                int res;
6562c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = PyObject_GetAttrString(obj, "asname");
6563c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (tmp == NULL) goto failed;
6564c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                res = obj2ast_identifier(tmp, &asname, arena);
6565c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                if (res != 0) goto failed;
6566c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                Py_XDECREF(tmp);
6567c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                tmp = NULL;
6568c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        } else {
6569c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                asname = NULL;
6570c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        }
6571c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        *out = alias(name, asname, arena);
6572c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 0;
6573c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielfailed:
6574c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        Py_XDECREF(tmp);
6575c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return 1;
6576c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6577c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6578c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6579c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyMODINIT_FUNC
6580c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielinit_ast(void)
6581c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6582c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyObject *m, *d;
6583c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!init_types()) return;
6584c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        m = Py_InitModule3("_ast", NULL, NULL);
6585c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (!m) return;
6586c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        d = PyModule_GetDict(m);
6587c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return;
6588c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
6589c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return;
6590c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyModule_AddStringConstant(m, "__version__", "82160") < 0)
6591c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                return;
6592c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return;
6593c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
6594c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6595c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type)
6596c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            < 0) return;
6597c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) <
6598c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6599c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return;
6600c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return;
6601c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type)
6602c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            < 0) return;
6603c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
6604c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6605c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0)
6606c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6607c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0)
6608c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6609c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0)
6610c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6611c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) <
6612c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6613c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Print", (PyObject*)Print_type) < 0) return;
6614c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return;
6615c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return;
6616c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return;
6617c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return;
6618c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return;
6619c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "TryExcept", (PyObject*)TryExcept_type) <
6620c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6621c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "TryFinally", (PyObject*)TryFinally_type) <
6622c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6623c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0)
6624c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6625c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0)
6626c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6627c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) <
6628c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6629c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Exec", (PyObject*)Exec_type) < 0) return;
6630c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0)
6631c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6632c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return;
6633c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return;
6634c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return;
6635c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
6636c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6637c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return;
6638c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0)
6639c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6640c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return;
6641c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0)
6642c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6643c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0)
6644c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6645c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return;
6646c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return;
6647c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return;
6648c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
6649c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6650c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0)
6651c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6652c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
6653c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6654c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "GeneratorExp",
6655c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            (PyObject*)GeneratorExp_type) < 0) return;
6656c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return;
6657c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
6658c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6659c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return;
6660c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Repr", (PyObject*)Repr_type) < 0) return;
6661c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return;
6662c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return;
6663c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
6664c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6665c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) <
6666c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6667c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return;
6668c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return;
6669c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return;
6670c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "expr_context",
6671c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            (PyObject*)expr_context_type) < 0) return;
6672c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return;
6673c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return;
6674c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return;
6675c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0)
6676c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6677c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
6678c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6679c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return;
6680c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return;
6681c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0)
6682c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6683c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return;
6684c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
6685c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6686c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return;
6687c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0)
6688c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6689c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return;
6690c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return;
6691c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
6692c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6693c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return;
6694c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return;
6695c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return;
6696c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return;
6697c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return;
6698c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return;
6699c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0)
6700c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6701c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0)
6702c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6703c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return;
6704c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0)
6705c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6706c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0)
6707c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6708c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
6709c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6710c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0)
6711c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6712c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0)
6713c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6714c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return;
6715c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return;
6716c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return;
6717c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return;
6718c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return;
6719c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return;
6720c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return;
6721c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return;
6722c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return;
6723c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return;
6724c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return;
6725c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return;
6726c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return;
6727c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return;
6728c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "comprehension",
6729c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            (PyObject*)comprehension_type) < 0) return;
6730c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "excepthandler",
6731c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            (PyObject*)excepthandler_type) < 0) return;
6732c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "ExceptHandler",
6733c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            (PyObject*)ExceptHandler_type) < 0) return;
6734c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) <
6735c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            0) return;
6736c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0)
6737c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel            return;
6738c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return;
6739c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6740c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6741c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6742c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielPyObject* PyAST_mod2obj(mod_ty t)
6743c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6744c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    init_types();
6745c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return ast2obj_mod(t);
6746c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6747c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6748c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
6749c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielmod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
6750c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6751c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    mod_ty res;
6752c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    PyObject *req_type[3];
6753c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    char *req_name[3];
6754c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    int isinstance;
6755c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6756c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_type[0] = (PyObject*)Module_type;
6757c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_type[1] = (PyObject*)Expression_type;
6758c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_type[2] = (PyObject*)Interactive_type;
6759c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6760c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_name[0] = "Module";
6761c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_name[1] = "Expression";
6762c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    req_name[2] = "Interactive";
6763c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6764c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    assert(0 <= mode && mode <= 2);
6765c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6766c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    init_types();
6767c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6768c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    isinstance = PyObject_IsInstance(ast, req_type[mode]);
6769c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (isinstance == -1)
6770c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
6771c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (!isinstance) {
6772c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
6773c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel                     req_name[mode], Py_TYPE(ast)->tp_name);
6774c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
6775c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    }
6776c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    if (obj2ast_mod(ast, &res, arena) != 0)
6777c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return NULL;
6778c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    else
6779c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel        return res;
6780c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6781c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6782c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDanielint PyAST_Check(PyObject* obj)
6783c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel{
6784c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    init_types();
6785c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel    return PyObject_IsInstance(obj, (PyObject*)&AST_type);
6786c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel}
6787c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6788c8042e10763bca064df257547d04ae3dfcdfaf91Daryl McDaniel
6789