blob: 445049dfb519498902856caddd58f6abf679e840 [file] [log] [blame]
Neal Norwitz897ff812005-12-11 21:18:22 +00001/* File automatically generated by Parser/asdl_c.py */
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002
3#include "Python.h"
4#include "Python-ast.h"
5
Neal Norwitz6576bd82005-11-13 18:41:28 +00006static int marshal_write_mod(PyObject **, int *, mod_ty);
7static int marshal_write_stmt(PyObject **, int *, stmt_ty);
8static int marshal_write_expr(PyObject **, int *, expr_ty);
9static int marshal_write_expr_context(PyObject **, int *, expr_context_ty);
10static int marshal_write_slice(PyObject **, int *, slice_ty);
11static int marshal_write_boolop(PyObject **, int *, boolop_ty);
12static int marshal_write_operator(PyObject **, int *, operator_ty);
13static int marshal_write_unaryop(PyObject **, int *, unaryop_ty);
14static int marshal_write_cmpop(PyObject **, int *, cmpop_ty);
15static int marshal_write_comprehension(PyObject **, int *, comprehension_ty);
16static int marshal_write_excepthandler(PyObject **, int *, excepthandler_ty);
17static int marshal_write_arguments(PyObject **, int *, arguments_ty);
18static int marshal_write_keyword(PyObject **, int *, keyword_ty);
19static int marshal_write_alias(PyObject **, int *, alias_ty);
Neal Norwitz7b5a6042005-11-13 19:14:20 +000020
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000021mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +000022Module(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000023{
24 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +000025 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000026 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +000027 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000028 return NULL;
29 }
30 p->kind = Module_kind;
31 p->v.Module.body = body;
32 return p;
33}
34
35mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +000036Interactive(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000037{
38 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +000039 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000040 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +000041 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000042 return NULL;
43 }
44 p->kind = Interactive_kind;
45 p->v.Interactive.body = body;
46 return p;
47}
48
49mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +000050Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000051{
52 mod_ty p;
53 if (!body) {
54 PyErr_SetString(PyExc_ValueError,
55 "field body is required for Expression");
56 return NULL;
57 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +000058 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000059 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +000060 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000061 return NULL;
62 }
63 p->kind = Expression_kind;
64 p->v.Expression.body = body;
65 return p;
66}
67
68mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +000069Suite(asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000070{
71 mod_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +000072 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000073 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +000074 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000075 return NULL;
76 }
77 p->kind = Suite_kind;
78 p->v.Suite.body = body;
79 return p;
80}
81
82stmt_ty
83FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
Neal Norwitzadb69fc2005-12-17 20:54:49 +000084 decorators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000085{
86 stmt_ty p;
87 if (!name) {
88 PyErr_SetString(PyExc_ValueError,
89 "field name is required for FunctionDef");
90 return NULL;
91 }
92 if (!args) {
93 PyErr_SetString(PyExc_ValueError,
94 "field args is required for FunctionDef");
95 return NULL;
96 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +000097 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000098 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +000099 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000100 return NULL;
101 }
102 p->kind = FunctionDef_kind;
103 p->v.FunctionDef.name = name;
104 p->v.FunctionDef.args = args;
105 p->v.FunctionDef.body = body;
106 p->v.FunctionDef.decorators = decorators;
107 p->lineno = lineno;
108 return p;
109}
110
111stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000112ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno,
113 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000114{
115 stmt_ty p;
116 if (!name) {
117 PyErr_SetString(PyExc_ValueError,
118 "field name is required for ClassDef");
119 return NULL;
120 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000121 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000122 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000123 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000124 return NULL;
125 }
126 p->kind = ClassDef_kind;
127 p->v.ClassDef.name = name;
128 p->v.ClassDef.bases = bases;
129 p->v.ClassDef.body = body;
130 p->lineno = lineno;
131 return p;
132}
133
134stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000135Return(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000136{
137 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000138 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000139 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000140 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000141 return NULL;
142 }
143 p->kind = Return_kind;
144 p->v.Return.value = value;
145 p->lineno = lineno;
146 return p;
147}
148
149stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000150Delete(asdl_seq * targets, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000151{
152 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000153 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000154 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000155 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000156 return NULL;
157 }
158 p->kind = Delete_kind;
159 p->v.Delete.targets = targets;
160 p->lineno = lineno;
161 return p;
162}
163
164stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000165Assign(asdl_seq * targets, expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000166{
167 stmt_ty p;
168 if (!value) {
169 PyErr_SetString(PyExc_ValueError,
170 "field value is required for Assign");
171 return NULL;
172 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000173 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000174 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000175 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000176 return NULL;
177 }
178 p->kind = Assign_kind;
179 p->v.Assign.targets = targets;
180 p->v.Assign.value = value;
181 p->lineno = lineno;
182 return p;
183}
184
185stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000186AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, PyArena
187 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000188{
189 stmt_ty p;
190 if (!target) {
191 PyErr_SetString(PyExc_ValueError,
192 "field target is required for AugAssign");
193 return NULL;
194 }
195 if (!op) {
196 PyErr_SetString(PyExc_ValueError,
197 "field op is required for AugAssign");
198 return NULL;
199 }
200 if (!value) {
201 PyErr_SetString(PyExc_ValueError,
202 "field value is required for AugAssign");
203 return NULL;
204 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000205 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000206 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000207 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000208 return NULL;
209 }
210 p->kind = AugAssign_kind;
211 p->v.AugAssign.target = target;
212 p->v.AugAssign.op = op;
213 p->v.AugAssign.value = value;
214 p->lineno = lineno;
215 return p;
216}
217
218stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000219Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000220{
221 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000222 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000223 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000224 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000225 return NULL;
226 }
227 p->kind = Print_kind;
228 p->v.Print.dest = dest;
229 p->v.Print.values = values;
230 p->v.Print.nl = nl;
231 p->lineno = lineno;
232 return p;
233}
234
235stmt_ty
236For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000237 lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000238{
239 stmt_ty p;
240 if (!target) {
241 PyErr_SetString(PyExc_ValueError,
242 "field target is required for For");
243 return NULL;
244 }
245 if (!iter) {
246 PyErr_SetString(PyExc_ValueError,
247 "field iter is required for For");
248 return NULL;
249 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000250 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000251 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000252 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000253 return NULL;
254 }
255 p->kind = For_kind;
256 p->v.For.target = target;
257 p->v.For.iter = iter;
258 p->v.For.body = body;
259 p->v.For.orelse = orelse;
260 p->lineno = lineno;
261 return p;
262}
263
264stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000265While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena
266 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000267{
268 stmt_ty p;
269 if (!test) {
270 PyErr_SetString(PyExc_ValueError,
271 "field test is required for While");
272 return NULL;
273 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000274 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000275 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000276 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000277 return NULL;
278 }
279 p->kind = While_kind;
280 p->v.While.test = test;
281 p->v.While.body = body;
282 p->v.While.orelse = orelse;
283 p->lineno = lineno;
284 return p;
285}
286
287stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000288If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000289{
290 stmt_ty p;
291 if (!test) {
292 PyErr_SetString(PyExc_ValueError,
293 "field test is required for If");
294 return NULL;
295 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000296 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000297 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000298 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000299 return NULL;
300 }
301 p->kind = If_kind;
302 p->v.If.test = test;
303 p->v.If.body = body;
304 p->v.If.orelse = orelse;
305 p->lineno = lineno;
306 return p;
307}
308
309stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000310Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000311{
312 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000313 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000314 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000315 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000316 return NULL;
317 }
318 p->kind = Raise_kind;
319 p->v.Raise.type = type;
320 p->v.Raise.inst = inst;
321 p->v.Raise.tback = tback;
322 p->lineno = lineno;
323 return p;
324}
325
326stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000327TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno,
328 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000329{
330 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000331 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000332 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000333 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000334 return NULL;
335 }
336 p->kind = TryExcept_kind;
337 p->v.TryExcept.body = body;
338 p->v.TryExcept.handlers = handlers;
339 p->v.TryExcept.orelse = orelse;
340 p->lineno = lineno;
341 return p;
342}
343
344stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000345TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000346{
347 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000348 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000349 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000350 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000351 return NULL;
352 }
353 p->kind = TryFinally_kind;
354 p->v.TryFinally.body = body;
355 p->v.TryFinally.finalbody = finalbody;
356 p->lineno = lineno;
357 return p;
358}
359
360stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000361Assert(expr_ty test, expr_ty msg, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000362{
363 stmt_ty p;
364 if (!test) {
365 PyErr_SetString(PyExc_ValueError,
366 "field test is required for Assert");
367 return NULL;
368 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000369 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000370 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000371 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000372 return NULL;
373 }
374 p->kind = Assert_kind;
375 p->v.Assert.test = test;
376 p->v.Assert.msg = msg;
377 p->lineno = lineno;
378 return p;
379}
380
381stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000382Import(asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000383{
384 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000385 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000386 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000387 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000388 return NULL;
389 }
390 p->kind = Import_kind;
391 p->v.Import.names = names;
392 p->lineno = lineno;
393 return p;
394}
395
396stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000397ImportFrom(identifier module, asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000398{
399 stmt_ty p;
400 if (!module) {
401 PyErr_SetString(PyExc_ValueError,
402 "field module is required for ImportFrom");
403 return NULL;
404 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000405 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000406 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000407 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000408 return NULL;
409 }
410 p->kind = ImportFrom_kind;
411 p->v.ImportFrom.module = module;
412 p->v.ImportFrom.names = names;
413 p->lineno = lineno;
414 return p;
415}
416
417stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000418Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000419{
420 stmt_ty p;
421 if (!body) {
422 PyErr_SetString(PyExc_ValueError,
423 "field body is required for Exec");
424 return NULL;
425 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000426 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000427 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000428 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000429 return NULL;
430 }
431 p->kind = Exec_kind;
432 p->v.Exec.body = body;
433 p->v.Exec.globals = globals;
434 p->v.Exec.locals = locals;
435 p->lineno = lineno;
436 return p;
437}
438
439stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000440Global(asdl_seq * names, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000441{
442 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000443 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000444 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000445 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000446 return NULL;
447 }
448 p->kind = Global_kind;
449 p->v.Global.names = names;
450 p->lineno = lineno;
451 return p;
452}
453
454stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000455Expr(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000456{
457 stmt_ty p;
458 if (!value) {
459 PyErr_SetString(PyExc_ValueError,
460 "field value is required for Expr");
461 return NULL;
462 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000463 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000464 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000465 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000466 return NULL;
467 }
468 p->kind = Expr_kind;
469 p->v.Expr.value = value;
470 p->lineno = lineno;
471 return p;
472}
473
474stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000475Pass(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000476{
477 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000478 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000479 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000480 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000481 return NULL;
482 }
483 p->kind = Pass_kind;
484 p->lineno = lineno;
485 return p;
486}
487
488stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000489Break(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000490{
491 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000492 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000493 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000494 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000495 return NULL;
496 }
497 p->kind = Break_kind;
498 p->lineno = lineno;
499 return p;
500}
501
502stmt_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000503Continue(int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000504{
505 stmt_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000506 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000507 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000508 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000509 return NULL;
510 }
511 p->kind = Continue_kind;
512 p->lineno = lineno;
513 return p;
514}
515
516expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000517BoolOp(boolop_ty op, asdl_seq * values, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000518{
519 expr_ty p;
520 if (!op) {
521 PyErr_SetString(PyExc_ValueError,
522 "field op is required for BoolOp");
523 return NULL;
524 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000525 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000526 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000527 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000528 return NULL;
529 }
530 p->kind = BoolOp_kind;
531 p->v.BoolOp.op = op;
532 p->v.BoolOp.values = values;
533 p->lineno = lineno;
534 return p;
535}
536
537expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000538BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000539{
540 expr_ty p;
541 if (!left) {
542 PyErr_SetString(PyExc_ValueError,
543 "field left is required for BinOp");
544 return NULL;
545 }
546 if (!op) {
547 PyErr_SetString(PyExc_ValueError,
548 "field op is required for BinOp");
549 return NULL;
550 }
551 if (!right) {
552 PyErr_SetString(PyExc_ValueError,
553 "field right is required for BinOp");
554 return NULL;
555 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000556 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000557 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000558 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000559 return NULL;
560 }
561 p->kind = BinOp_kind;
562 p->v.BinOp.left = left;
563 p->v.BinOp.op = op;
564 p->v.BinOp.right = right;
565 p->lineno = lineno;
566 return p;
567}
568
569expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000570UnaryOp(unaryop_ty op, expr_ty operand, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000571{
572 expr_ty p;
573 if (!op) {
574 PyErr_SetString(PyExc_ValueError,
575 "field op is required for UnaryOp");
576 return NULL;
577 }
578 if (!operand) {
579 PyErr_SetString(PyExc_ValueError,
580 "field operand is required for UnaryOp");
581 return NULL;
582 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000583 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000584 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000585 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000586 return NULL;
587 }
588 p->kind = UnaryOp_kind;
589 p->v.UnaryOp.op = op;
590 p->v.UnaryOp.operand = operand;
591 p->lineno = lineno;
592 return p;
593}
594
595expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000596Lambda(arguments_ty args, expr_ty body, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000597{
598 expr_ty p;
599 if (!args) {
600 PyErr_SetString(PyExc_ValueError,
601 "field args is required for Lambda");
602 return NULL;
603 }
604 if (!body) {
605 PyErr_SetString(PyExc_ValueError,
606 "field body is required for Lambda");
607 return NULL;
608 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000609 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000610 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000611 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000612 return NULL;
613 }
614 p->kind = Lambda_kind;
615 p->v.Lambda.args = args;
616 p->v.Lambda.body = body;
617 p->lineno = lineno;
618 return p;
619}
620
621expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000622Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000623{
624 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000625 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000626 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000627 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000628 return NULL;
629 }
630 p->kind = Dict_kind;
631 p->v.Dict.keys = keys;
632 p->v.Dict.values = values;
633 p->lineno = lineno;
634 return p;
635}
636
637expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000638ListComp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000639{
640 expr_ty p;
641 if (!elt) {
642 PyErr_SetString(PyExc_ValueError,
643 "field elt is required for ListComp");
644 return NULL;
645 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000646 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000647 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000648 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000649 return NULL;
650 }
651 p->kind = ListComp_kind;
652 p->v.ListComp.elt = elt;
653 p->v.ListComp.generators = generators;
654 p->lineno = lineno;
655 return p;
656}
657
658expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000659GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000660{
661 expr_ty p;
662 if (!elt) {
663 PyErr_SetString(PyExc_ValueError,
664 "field elt is required for GeneratorExp");
665 return NULL;
666 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000667 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000668 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000669 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000670 return NULL;
671 }
672 p->kind = GeneratorExp_kind;
673 p->v.GeneratorExp.elt = elt;
674 p->v.GeneratorExp.generators = generators;
675 p->lineno = lineno;
676 return p;
677}
678
679expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000680Yield(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000681{
682 expr_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000683 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000684 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000685 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000686 return NULL;
687 }
688 p->kind = Yield_kind;
689 p->v.Yield.value = value;
690 p->lineno = lineno;
691 return p;
692}
693
694expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000695Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int lineno,
696 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000697{
698 expr_ty p;
699 if (!left) {
700 PyErr_SetString(PyExc_ValueError,
701 "field left is required for Compare");
702 return NULL;
703 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000704 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000705 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000706 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000707 return NULL;
708 }
709 p->kind = Compare_kind;
710 p->v.Compare.left = left;
711 p->v.Compare.ops = ops;
712 p->v.Compare.comparators = comparators;
713 p->lineno = lineno;
714 return p;
715}
716
717expr_ty
718Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000719 expr_ty kwargs, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000720{
721 expr_ty p;
722 if (!func) {
723 PyErr_SetString(PyExc_ValueError,
724 "field func is required for Call");
725 return NULL;
726 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000727 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000728 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000729 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000730 return NULL;
731 }
732 p->kind = Call_kind;
733 p->v.Call.func = func;
734 p->v.Call.args = args;
735 p->v.Call.keywords = keywords;
736 p->v.Call.starargs = starargs;
737 p->v.Call.kwargs = kwargs;
738 p->lineno = lineno;
739 return p;
740}
741
742expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000743Repr(expr_ty value, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000744{
745 expr_ty p;
746 if (!value) {
747 PyErr_SetString(PyExc_ValueError,
748 "field value is required for Repr");
749 return NULL;
750 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000751 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000752 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000753 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000754 return NULL;
755 }
756 p->kind = Repr_kind;
757 p->v.Repr.value = value;
758 p->lineno = lineno;
759 return p;
760}
761
762expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000763Num(object n, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000764{
765 expr_ty p;
766 if (!n) {
767 PyErr_SetString(PyExc_ValueError,
768 "field n is required for Num");
769 return NULL;
770 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000771 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000772 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000773 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000774 return NULL;
775 }
776 p->kind = Num_kind;
777 p->v.Num.n = n;
778 p->lineno = lineno;
779 return p;
780}
781
782expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000783Str(string s, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000784{
785 expr_ty p;
786 if (!s) {
787 PyErr_SetString(PyExc_ValueError,
788 "field s is required for Str");
789 return NULL;
790 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000791 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000792 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000793 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000794 return NULL;
795 }
796 p->kind = Str_kind;
797 p->v.Str.s = s;
798 p->lineno = lineno;
799 return p;
800}
801
802expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000803Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno,
804 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000805{
806 expr_ty p;
807 if (!value) {
808 PyErr_SetString(PyExc_ValueError,
809 "field value is required for Attribute");
810 return NULL;
811 }
812 if (!attr) {
813 PyErr_SetString(PyExc_ValueError,
814 "field attr is required for Attribute");
815 return NULL;
816 }
817 if (!ctx) {
818 PyErr_SetString(PyExc_ValueError,
819 "field ctx is required for Attribute");
820 return NULL;
821 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000822 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000823 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000824 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000825 return NULL;
826 }
827 p->kind = Attribute_kind;
828 p->v.Attribute.value = value;
829 p->v.Attribute.attr = attr;
830 p->v.Attribute.ctx = ctx;
831 p->lineno = lineno;
832 return p;
833}
834
835expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000836Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno,
837 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000838{
839 expr_ty p;
840 if (!value) {
841 PyErr_SetString(PyExc_ValueError,
842 "field value is required for Subscript");
843 return NULL;
844 }
845 if (!slice) {
846 PyErr_SetString(PyExc_ValueError,
847 "field slice is required for Subscript");
848 return NULL;
849 }
850 if (!ctx) {
851 PyErr_SetString(PyExc_ValueError,
852 "field ctx is required for Subscript");
853 return NULL;
854 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000855 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000856 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000857 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000858 return NULL;
859 }
860 p->kind = Subscript_kind;
861 p->v.Subscript.value = value;
862 p->v.Subscript.slice = slice;
863 p->v.Subscript.ctx = ctx;
864 p->lineno = lineno;
865 return p;
866}
867
868expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000869Name(identifier id, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000870{
871 expr_ty p;
872 if (!id) {
873 PyErr_SetString(PyExc_ValueError,
874 "field id is required for Name");
875 return NULL;
876 }
877 if (!ctx) {
878 PyErr_SetString(PyExc_ValueError,
879 "field ctx is required for Name");
880 return NULL;
881 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000882 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000883 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000884 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000885 return NULL;
886 }
887 p->kind = Name_kind;
888 p->v.Name.id = id;
889 p->v.Name.ctx = ctx;
890 p->lineno = lineno;
891 return p;
892}
893
894expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000895List(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000896{
897 expr_ty p;
898 if (!ctx) {
899 PyErr_SetString(PyExc_ValueError,
900 "field ctx is required for List");
901 return NULL;
902 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000903 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000904 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000905 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000906 return NULL;
907 }
908 p->kind = List_kind;
909 p->v.List.elts = elts;
910 p->v.List.ctx = ctx;
911 p->lineno = lineno;
912 return p;
913}
914
915expr_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000916Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000917{
918 expr_ty p;
919 if (!ctx) {
920 PyErr_SetString(PyExc_ValueError,
921 "field ctx is required for Tuple");
922 return NULL;
923 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000924 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000925 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000926 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000927 return NULL;
928 }
929 p->kind = Tuple_kind;
930 p->v.Tuple.elts = elts;
931 p->v.Tuple.ctx = ctx;
932 p->lineno = lineno;
933 return p;
934}
935
936slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000937Ellipsis(PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000938{
939 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000940 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000941 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000942 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000943 return NULL;
944 }
945 p->kind = Ellipsis_kind;
946 return p;
947}
948
949slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000950Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000951{
952 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000953 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000954 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000955 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000956 return NULL;
957 }
958 p->kind = Slice_kind;
959 p->v.Slice.lower = lower;
960 p->v.Slice.upper = upper;
961 p->v.Slice.step = step;
962 return p;
963}
964
965slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000966ExtSlice(asdl_seq * dims, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000967{
968 slice_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000969 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000970 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000971 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000972 return NULL;
973 }
974 p->kind = ExtSlice_kind;
975 p->v.ExtSlice.dims = dims;
976 return p;
977}
978
979slice_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000980Index(expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000981{
982 slice_ty p;
983 if (!value) {
984 PyErr_SetString(PyExc_ValueError,
985 "field value is required for Index");
986 return NULL;
987 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000988 p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000989 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +0000990 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000991 return NULL;
992 }
993 p->kind = Index_kind;
994 p->v.Index.value = value;
995 return p;
996}
997
998comprehension_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000999comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001000{
1001 comprehension_ty p;
1002 if (!target) {
1003 PyErr_SetString(PyExc_ValueError,
1004 "field target is required for comprehension");
1005 return NULL;
1006 }
1007 if (!iter) {
1008 PyErr_SetString(PyExc_ValueError,
1009 "field iter is required for comprehension");
1010 return NULL;
1011 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001012 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001013 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001014 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001015 return NULL;
1016 }
1017 p->target = target;
1018 p->iter = iter;
1019 p->ifs = ifs;
1020 return p;
1021}
1022
1023excepthandler_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001024excepthandler(expr_ty type, expr_ty name, asdl_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001025{
1026 excepthandler_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001027 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001028 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001029 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001030 return NULL;
1031 }
1032 p->type = type;
1033 p->name = name;
1034 p->body = body;
1035 return p;
1036}
1037
1038arguments_ty
1039arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001040 defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001041{
1042 arguments_ty p;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001043 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001044 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001045 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001046 return NULL;
1047 }
1048 p->args = args;
1049 p->vararg = vararg;
1050 p->kwarg = kwarg;
1051 p->defaults = defaults;
1052 return p;
1053}
1054
1055keyword_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001056keyword(identifier arg, expr_ty value, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001057{
1058 keyword_ty p;
1059 if (!arg) {
1060 PyErr_SetString(PyExc_ValueError,
1061 "field arg is required for keyword");
1062 return NULL;
1063 }
1064 if (!value) {
1065 PyErr_SetString(PyExc_ValueError,
1066 "field value is required for keyword");
1067 return NULL;
1068 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001069 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001070 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001071 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001072 return NULL;
1073 }
1074 p->arg = arg;
1075 p->value = value;
1076 return p;
1077}
1078
1079alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001080alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001081{
1082 alias_ty p;
1083 if (!name) {
1084 PyErr_SetString(PyExc_ValueError,
1085 "field name is required for alias");
1086 return NULL;
1087 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001088 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001089 if (!p) {
Neal Norwitz12ebfd72005-10-23 19:22:48 +00001090 PyErr_NoMemory();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001091 return NULL;
1092 }
1093 p->name = name;
1094 p->asname = asname;
1095 return p;
1096}
1097
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001098
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001099
1100#define CHECKSIZE(BUF, OFF, MIN) { \
1101 int need = *(OFF) + MIN; \
1102 if (need >= PyString_GET_SIZE(*(BUF))) { \
1103 int newsize = PyString_GET_SIZE(*(BUF)) * 2; \
1104 if (newsize < need) \
1105 newsize = need; \
1106 if (_PyString_Resize((BUF), newsize) < 0) \
1107 return 0; \
1108 } \
1109}
1110
1111static int
1112marshal_write_int(PyObject **buf, int *offset, int x)
1113{
1114 char *s;
1115
1116 CHECKSIZE(buf, offset, 4)
1117 s = PyString_AS_STRING(*buf) + (*offset);
1118 s[0] = (x & 0xff);
1119 s[1] = (x >> 8) & 0xff;
1120 s[2] = (x >> 16) & 0xff;
1121 s[3] = (x >> 24) & 0xff;
1122 *offset += 4;
1123 return 1;
1124}
1125
1126static int
1127marshal_write_bool(PyObject **buf, int *offset, bool b)
1128{
1129 if (b)
1130 marshal_write_int(buf, offset, 1);
1131 else
1132 marshal_write_int(buf, offset, 0);
1133 return 1;
1134}
1135
1136static int
1137marshal_write_identifier(PyObject **buf, int *offset, identifier id)
1138{
1139 int l = PyString_GET_SIZE(id);
1140 marshal_write_int(buf, offset, l);
1141 CHECKSIZE(buf, offset, l);
1142 memcpy(PyString_AS_STRING(*buf) + *offset,
1143 PyString_AS_STRING(id), l);
1144 *offset += l;
1145 return 1;
1146}
1147
1148static int
1149marshal_write_string(PyObject **buf, int *offset, string s)
1150{
1151 int len = PyString_GET_SIZE(s);
1152 marshal_write_int(buf, offset, len);
1153 CHECKSIZE(buf, offset, len);
1154 memcpy(PyString_AS_STRING(*buf) + *offset,
1155 PyString_AS_STRING(s), len);
1156 *offset += len;
1157 return 1;
1158}
1159
1160static int
1161marshal_write_object(PyObject **buf, int *offset, object s)
1162{
1163 /* XXX */
1164 return 0;
1165}
1166
1167
Neal Norwitz6576bd82005-11-13 18:41:28 +00001168static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001169marshal_write_mod(PyObject **buf, int *off, mod_ty o)
1170{
1171 int i;
1172 switch (o->kind) {
1173 case Module_kind:
1174 marshal_write_int(buf, off, 1);
1175 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Module.body));
1176 for (i = 0; i < asdl_seq_LEN(o->v.Module.body); i++) {
1177 void *elt = asdl_seq_GET(o->v.Module.body, i);
1178 marshal_write_stmt(buf, off, (stmt_ty)elt);
1179 }
1180 break;
1181 case Interactive_kind:
1182 marshal_write_int(buf, off, 2);
1183 marshal_write_int(buf, off,
1184 asdl_seq_LEN(o->v.Interactive.body));
1185 for (i = 0; i < asdl_seq_LEN(o->v.Interactive.body); i++) {
1186 void *elt = asdl_seq_GET(o->v.Interactive.body, i);
1187 marshal_write_stmt(buf, off, (stmt_ty)elt);
1188 }
1189 break;
1190 case Expression_kind:
1191 marshal_write_int(buf, off, 3);
1192 marshal_write_expr(buf, off, o->v.Expression.body);
1193 break;
1194 case Suite_kind:
1195 marshal_write_int(buf, off, 4);
1196 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Suite.body));
1197 for (i = 0; i < asdl_seq_LEN(o->v.Suite.body); i++) {
1198 void *elt = asdl_seq_GET(o->v.Suite.body, i);
1199 marshal_write_stmt(buf, off, (stmt_ty)elt);
1200 }
1201 break;
1202 }
1203 return 1;
1204}
1205
Neal Norwitz6576bd82005-11-13 18:41:28 +00001206static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001207marshal_write_stmt(PyObject **buf, int *off, stmt_ty o)
1208{
1209 int i;
1210 switch (o->kind) {
1211 case FunctionDef_kind:
1212 marshal_write_int(buf, off, 1);
1213 marshal_write_identifier(buf, off, o->v.FunctionDef.name);
1214 marshal_write_arguments(buf, off, o->v.FunctionDef.args);
1215 marshal_write_int(buf, off,
1216 asdl_seq_LEN(o->v.FunctionDef.body));
1217 for (i = 0; i < asdl_seq_LEN(o->v.FunctionDef.body); i++) {
1218 void *elt = asdl_seq_GET(o->v.FunctionDef.body, i);
1219 marshal_write_stmt(buf, off, (stmt_ty)elt);
1220 }
1221 marshal_write_int(buf, off,
1222 asdl_seq_LEN(o->v.FunctionDef.decorators));
1223 for (i = 0; i < asdl_seq_LEN(o->v.FunctionDef.decorators); i++)
1224 {
1225 void *elt = asdl_seq_GET(o->v.FunctionDef.decorators,
1226 i);
1227 marshal_write_expr(buf, off, (expr_ty)elt);
1228 }
1229 break;
1230 case ClassDef_kind:
1231 marshal_write_int(buf, off, 2);
1232 marshal_write_identifier(buf, off, o->v.ClassDef.name);
1233 marshal_write_int(buf, off, asdl_seq_LEN(o->v.ClassDef.bases));
1234 for (i = 0; i < asdl_seq_LEN(o->v.ClassDef.bases); i++) {
1235 void *elt = asdl_seq_GET(o->v.ClassDef.bases, i);
1236 marshal_write_expr(buf, off, (expr_ty)elt);
1237 }
1238 marshal_write_int(buf, off, asdl_seq_LEN(o->v.ClassDef.body));
1239 for (i = 0; i < asdl_seq_LEN(o->v.ClassDef.body); i++) {
1240 void *elt = asdl_seq_GET(o->v.ClassDef.body, i);
1241 marshal_write_stmt(buf, off, (stmt_ty)elt);
1242 }
1243 break;
1244 case Return_kind:
1245 marshal_write_int(buf, off, 3);
1246 if (o->v.Return.value) {
1247 marshal_write_int(buf, off, 1);
1248 marshal_write_expr(buf, off, o->v.Return.value);
1249 }
1250 else {
1251 marshal_write_int(buf, off, 0);
1252 }
1253 break;
1254 case Delete_kind:
1255 marshal_write_int(buf, off, 4);
1256 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Delete.targets));
1257 for (i = 0; i < asdl_seq_LEN(o->v.Delete.targets); i++) {
1258 void *elt = asdl_seq_GET(o->v.Delete.targets, i);
1259 marshal_write_expr(buf, off, (expr_ty)elt);
1260 }
1261 break;
1262 case Assign_kind:
1263 marshal_write_int(buf, off, 5);
1264 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Assign.targets));
1265 for (i = 0; i < asdl_seq_LEN(o->v.Assign.targets); i++) {
1266 void *elt = asdl_seq_GET(o->v.Assign.targets, i);
1267 marshal_write_expr(buf, off, (expr_ty)elt);
1268 }
1269 marshal_write_expr(buf, off, o->v.Assign.value);
1270 break;
1271 case AugAssign_kind:
1272 marshal_write_int(buf, off, 6);
1273 marshal_write_expr(buf, off, o->v.AugAssign.target);
1274 marshal_write_operator(buf, off, o->v.AugAssign.op);
1275 marshal_write_expr(buf, off, o->v.AugAssign.value);
1276 break;
1277 case Print_kind:
1278 marshal_write_int(buf, off, 7);
1279 if (o->v.Print.dest) {
1280 marshal_write_int(buf, off, 1);
1281 marshal_write_expr(buf, off, o->v.Print.dest);
1282 }
1283 else {
1284 marshal_write_int(buf, off, 0);
1285 }
1286 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Print.values));
1287 for (i = 0; i < asdl_seq_LEN(o->v.Print.values); i++) {
1288 void *elt = asdl_seq_GET(o->v.Print.values, i);
1289 marshal_write_expr(buf, off, (expr_ty)elt);
1290 }
1291 marshal_write_bool(buf, off, o->v.Print.nl);
1292 break;
1293 case For_kind:
1294 marshal_write_int(buf, off, 8);
1295 marshal_write_expr(buf, off, o->v.For.target);
1296 marshal_write_expr(buf, off, o->v.For.iter);
1297 marshal_write_int(buf, off, asdl_seq_LEN(o->v.For.body));
1298 for (i = 0; i < asdl_seq_LEN(o->v.For.body); i++) {
1299 void *elt = asdl_seq_GET(o->v.For.body, i);
1300 marshal_write_stmt(buf, off, (stmt_ty)elt);
1301 }
1302 marshal_write_int(buf, off, asdl_seq_LEN(o->v.For.orelse));
1303 for (i = 0; i < asdl_seq_LEN(o->v.For.orelse); i++) {
1304 void *elt = asdl_seq_GET(o->v.For.orelse, i);
1305 marshal_write_stmt(buf, off, (stmt_ty)elt);
1306 }
1307 break;
1308 case While_kind:
1309 marshal_write_int(buf, off, 9);
1310 marshal_write_expr(buf, off, o->v.While.test);
1311 marshal_write_int(buf, off, asdl_seq_LEN(o->v.While.body));
1312 for (i = 0; i < asdl_seq_LEN(o->v.While.body); i++) {
1313 void *elt = asdl_seq_GET(o->v.While.body, i);
1314 marshal_write_stmt(buf, off, (stmt_ty)elt);
1315 }
1316 marshal_write_int(buf, off, asdl_seq_LEN(o->v.While.orelse));
1317 for (i = 0; i < asdl_seq_LEN(o->v.While.orelse); i++) {
1318 void *elt = asdl_seq_GET(o->v.While.orelse, i);
1319 marshal_write_stmt(buf, off, (stmt_ty)elt);
1320 }
1321 break;
1322 case If_kind:
1323 marshal_write_int(buf, off, 10);
1324 marshal_write_expr(buf, off, o->v.If.test);
1325 marshal_write_int(buf, off, asdl_seq_LEN(o->v.If.body));
1326 for (i = 0; i < asdl_seq_LEN(o->v.If.body); i++) {
1327 void *elt = asdl_seq_GET(o->v.If.body, i);
1328 marshal_write_stmt(buf, off, (stmt_ty)elt);
1329 }
1330 marshal_write_int(buf, off, asdl_seq_LEN(o->v.If.orelse));
1331 for (i = 0; i < asdl_seq_LEN(o->v.If.orelse); i++) {
1332 void *elt = asdl_seq_GET(o->v.If.orelse, i);
1333 marshal_write_stmt(buf, off, (stmt_ty)elt);
1334 }
1335 break;
1336 case Raise_kind:
1337 marshal_write_int(buf, off, 11);
1338 if (o->v.Raise.type) {
1339 marshal_write_int(buf, off, 1);
1340 marshal_write_expr(buf, off, o->v.Raise.type);
1341 }
1342 else {
1343 marshal_write_int(buf, off, 0);
1344 }
1345 if (o->v.Raise.inst) {
1346 marshal_write_int(buf, off, 1);
1347 marshal_write_expr(buf, off, o->v.Raise.inst);
1348 }
1349 else {
1350 marshal_write_int(buf, off, 0);
1351 }
1352 if (o->v.Raise.tback) {
1353 marshal_write_int(buf, off, 1);
1354 marshal_write_expr(buf, off, o->v.Raise.tback);
1355 }
1356 else {
1357 marshal_write_int(buf, off, 0);
1358 }
1359 break;
1360 case TryExcept_kind:
1361 marshal_write_int(buf, off, 12);
1362 marshal_write_int(buf, off, asdl_seq_LEN(o->v.TryExcept.body));
1363 for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.body); i++) {
1364 void *elt = asdl_seq_GET(o->v.TryExcept.body, i);
1365 marshal_write_stmt(buf, off, (stmt_ty)elt);
1366 }
1367 marshal_write_int(buf, off,
1368 asdl_seq_LEN(o->v.TryExcept.handlers));
1369 for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.handlers); i++) {
1370 void *elt = asdl_seq_GET(o->v.TryExcept.handlers, i);
1371 marshal_write_excepthandler(buf, off,
1372 (excepthandler_ty)elt);
1373 }
1374 marshal_write_int(buf, off,
1375 asdl_seq_LEN(o->v.TryExcept.orelse));
1376 for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.orelse); i++) {
1377 void *elt = asdl_seq_GET(o->v.TryExcept.orelse, i);
1378 marshal_write_stmt(buf, off, (stmt_ty)elt);
1379 }
1380 break;
1381 case TryFinally_kind:
1382 marshal_write_int(buf, off, 13);
1383 marshal_write_int(buf, off, asdl_seq_LEN(o->v.TryFinally.body));
1384 for (i = 0; i < asdl_seq_LEN(o->v.TryFinally.body); i++) {
1385 void *elt = asdl_seq_GET(o->v.TryFinally.body, i);
1386 marshal_write_stmt(buf, off, (stmt_ty)elt);
1387 }
1388 marshal_write_int(buf, off,
1389 asdl_seq_LEN(o->v.TryFinally.finalbody));
1390 for (i = 0; i < asdl_seq_LEN(o->v.TryFinally.finalbody); i++) {
1391 void *elt = asdl_seq_GET(o->v.TryFinally.finalbody, i);
1392 marshal_write_stmt(buf, off, (stmt_ty)elt);
1393 }
1394 break;
1395 case Assert_kind:
1396 marshal_write_int(buf, off, 14);
1397 marshal_write_expr(buf, off, o->v.Assert.test);
1398 if (o->v.Assert.msg) {
1399 marshal_write_int(buf, off, 1);
1400 marshal_write_expr(buf, off, o->v.Assert.msg);
1401 }
1402 else {
1403 marshal_write_int(buf, off, 0);
1404 }
1405 break;
1406 case Import_kind:
1407 marshal_write_int(buf, off, 15);
1408 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Import.names));
1409 for (i = 0; i < asdl_seq_LEN(o->v.Import.names); i++) {
1410 void *elt = asdl_seq_GET(o->v.Import.names, i);
1411 marshal_write_alias(buf, off, (alias_ty)elt);
1412 }
1413 break;
1414 case ImportFrom_kind:
1415 marshal_write_int(buf, off, 16);
1416 marshal_write_identifier(buf, off, o->v.ImportFrom.module);
1417 marshal_write_int(buf, off,
1418 asdl_seq_LEN(o->v.ImportFrom.names));
1419 for (i = 0; i < asdl_seq_LEN(o->v.ImportFrom.names); i++) {
1420 void *elt = asdl_seq_GET(o->v.ImportFrom.names, i);
1421 marshal_write_alias(buf, off, (alias_ty)elt);
1422 }
1423 break;
1424 case Exec_kind:
1425 marshal_write_int(buf, off, 17);
1426 marshal_write_expr(buf, off, o->v.Exec.body);
1427 if (o->v.Exec.globals) {
1428 marshal_write_int(buf, off, 1);
1429 marshal_write_expr(buf, off, o->v.Exec.globals);
1430 }
1431 else {
1432 marshal_write_int(buf, off, 0);
1433 }
1434 if (o->v.Exec.locals) {
1435 marshal_write_int(buf, off, 1);
1436 marshal_write_expr(buf, off, o->v.Exec.locals);
1437 }
1438 else {
1439 marshal_write_int(buf, off, 0);
1440 }
1441 break;
1442 case Global_kind:
1443 marshal_write_int(buf, off, 18);
1444 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Global.names));
1445 for (i = 0; i < asdl_seq_LEN(o->v.Global.names); i++) {
1446 void *elt = asdl_seq_GET(o->v.Global.names, i);
1447 marshal_write_identifier(buf, off, (identifier)elt);
1448 }
1449 break;
1450 case Expr_kind:
1451 marshal_write_int(buf, off, 19);
1452 marshal_write_expr(buf, off, o->v.Expr.value);
1453 break;
1454 case Pass_kind:
1455 marshal_write_int(buf, off, 20);
1456 break;
1457 case Break_kind:
1458 marshal_write_int(buf, off, 21);
1459 break;
1460 case Continue_kind:
1461 marshal_write_int(buf, off, 22);
1462 break;
1463 }
1464 return 1;
1465}
1466
Neal Norwitz6576bd82005-11-13 18:41:28 +00001467static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001468marshal_write_expr(PyObject **buf, int *off, expr_ty o)
1469{
1470 int i;
1471 switch (o->kind) {
1472 case BoolOp_kind:
1473 marshal_write_int(buf, off, 1);
1474 marshal_write_boolop(buf, off, o->v.BoolOp.op);
1475 marshal_write_int(buf, off, asdl_seq_LEN(o->v.BoolOp.values));
1476 for (i = 0; i < asdl_seq_LEN(o->v.BoolOp.values); i++) {
1477 void *elt = asdl_seq_GET(o->v.BoolOp.values, i);
1478 marshal_write_expr(buf, off, (expr_ty)elt);
1479 }
1480 break;
1481 case BinOp_kind:
1482 marshal_write_int(buf, off, 2);
1483 marshal_write_expr(buf, off, o->v.BinOp.left);
1484 marshal_write_operator(buf, off, o->v.BinOp.op);
1485 marshal_write_expr(buf, off, o->v.BinOp.right);
1486 break;
1487 case UnaryOp_kind:
1488 marshal_write_int(buf, off, 3);
1489 marshal_write_unaryop(buf, off, o->v.UnaryOp.op);
1490 marshal_write_expr(buf, off, o->v.UnaryOp.operand);
1491 break;
1492 case Lambda_kind:
1493 marshal_write_int(buf, off, 4);
1494 marshal_write_arguments(buf, off, o->v.Lambda.args);
1495 marshal_write_expr(buf, off, o->v.Lambda.body);
1496 break;
1497 case Dict_kind:
1498 marshal_write_int(buf, off, 5);
1499 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Dict.keys));
1500 for (i = 0; i < asdl_seq_LEN(o->v.Dict.keys); i++) {
1501 void *elt = asdl_seq_GET(o->v.Dict.keys, i);
1502 marshal_write_expr(buf, off, (expr_ty)elt);
1503 }
1504 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Dict.values));
1505 for (i = 0; i < asdl_seq_LEN(o->v.Dict.values); i++) {
1506 void *elt = asdl_seq_GET(o->v.Dict.values, i);
1507 marshal_write_expr(buf, off, (expr_ty)elt);
1508 }
1509 break;
1510 case ListComp_kind:
1511 marshal_write_int(buf, off, 6);
1512 marshal_write_expr(buf, off, o->v.ListComp.elt);
1513 marshal_write_int(buf, off,
1514 asdl_seq_LEN(o->v.ListComp.generators));
1515 for (i = 0; i < asdl_seq_LEN(o->v.ListComp.generators); i++) {
1516 void *elt = asdl_seq_GET(o->v.ListComp.generators, i);
1517 marshal_write_comprehension(buf, off,
1518 (comprehension_ty)elt);
1519 }
1520 break;
1521 case GeneratorExp_kind:
1522 marshal_write_int(buf, off, 7);
1523 marshal_write_expr(buf, off, o->v.GeneratorExp.elt);
1524 marshal_write_int(buf, off,
1525 asdl_seq_LEN(o->v.GeneratorExp.generators));
1526 for (i = 0; i < asdl_seq_LEN(o->v.GeneratorExp.generators);
1527 i++) {
1528 void *elt = asdl_seq_GET(o->v.GeneratorExp.generators,
1529 i);
1530 marshal_write_comprehension(buf, off,
1531 (comprehension_ty)elt);
1532 }
1533 break;
1534 case Yield_kind:
1535 marshal_write_int(buf, off, 8);
1536 if (o->v.Yield.value) {
1537 marshal_write_int(buf, off, 1);
1538 marshal_write_expr(buf, off, o->v.Yield.value);
1539 }
1540 else {
1541 marshal_write_int(buf, off, 0);
1542 }
1543 break;
1544 case Compare_kind:
1545 marshal_write_int(buf, off, 9);
1546 marshal_write_expr(buf, off, o->v.Compare.left);
1547 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Compare.ops));
1548 for (i = 0; i < asdl_seq_LEN(o->v.Compare.ops); i++) {
1549 void *elt = asdl_seq_GET(o->v.Compare.ops, i);
1550 marshal_write_cmpop(buf, off, (cmpop_ty)elt);
1551 }
1552 marshal_write_int(buf, off,
1553 asdl_seq_LEN(o->v.Compare.comparators));
1554 for (i = 0; i < asdl_seq_LEN(o->v.Compare.comparators); i++) {
1555 void *elt = asdl_seq_GET(o->v.Compare.comparators, i);
1556 marshal_write_expr(buf, off, (expr_ty)elt);
1557 }
1558 break;
1559 case Call_kind:
1560 marshal_write_int(buf, off, 10);
1561 marshal_write_expr(buf, off, o->v.Call.func);
1562 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Call.args));
1563 for (i = 0; i < asdl_seq_LEN(o->v.Call.args); i++) {
1564 void *elt = asdl_seq_GET(o->v.Call.args, i);
1565 marshal_write_expr(buf, off, (expr_ty)elt);
1566 }
1567 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Call.keywords));
1568 for (i = 0; i < asdl_seq_LEN(o->v.Call.keywords); i++) {
1569 void *elt = asdl_seq_GET(o->v.Call.keywords, i);
1570 marshal_write_keyword(buf, off, (keyword_ty)elt);
1571 }
1572 if (o->v.Call.starargs) {
1573 marshal_write_int(buf, off, 1);
1574 marshal_write_expr(buf, off, o->v.Call.starargs);
1575 }
1576 else {
1577 marshal_write_int(buf, off, 0);
1578 }
1579 if (o->v.Call.kwargs) {
1580 marshal_write_int(buf, off, 1);
1581 marshal_write_expr(buf, off, o->v.Call.kwargs);
1582 }
1583 else {
1584 marshal_write_int(buf, off, 0);
1585 }
1586 break;
1587 case Repr_kind:
1588 marshal_write_int(buf, off, 11);
1589 marshal_write_expr(buf, off, o->v.Repr.value);
1590 break;
1591 case Num_kind:
1592 marshal_write_int(buf, off, 12);
1593 marshal_write_object(buf, off, o->v.Num.n);
1594 break;
1595 case Str_kind:
1596 marshal_write_int(buf, off, 13);
1597 marshal_write_string(buf, off, o->v.Str.s);
1598 break;
1599 case Attribute_kind:
1600 marshal_write_int(buf, off, 14);
1601 marshal_write_expr(buf, off, o->v.Attribute.value);
1602 marshal_write_identifier(buf, off, o->v.Attribute.attr);
1603 marshal_write_expr_context(buf, off, o->v.Attribute.ctx);
1604 break;
1605 case Subscript_kind:
1606 marshal_write_int(buf, off, 15);
1607 marshal_write_expr(buf, off, o->v.Subscript.value);
1608 marshal_write_slice(buf, off, o->v.Subscript.slice);
1609 marshal_write_expr_context(buf, off, o->v.Subscript.ctx);
1610 break;
1611 case Name_kind:
1612 marshal_write_int(buf, off, 16);
1613 marshal_write_identifier(buf, off, o->v.Name.id);
1614 marshal_write_expr_context(buf, off, o->v.Name.ctx);
1615 break;
1616 case List_kind:
1617 marshal_write_int(buf, off, 17);
1618 marshal_write_int(buf, off, asdl_seq_LEN(o->v.List.elts));
1619 for (i = 0; i < asdl_seq_LEN(o->v.List.elts); i++) {
1620 void *elt = asdl_seq_GET(o->v.List.elts, i);
1621 marshal_write_expr(buf, off, (expr_ty)elt);
1622 }
1623 marshal_write_expr_context(buf, off, o->v.List.ctx);
1624 break;
1625 case Tuple_kind:
1626 marshal_write_int(buf, off, 18);
1627 marshal_write_int(buf, off, asdl_seq_LEN(o->v.Tuple.elts));
1628 for (i = 0; i < asdl_seq_LEN(o->v.Tuple.elts); i++) {
1629 void *elt = asdl_seq_GET(o->v.Tuple.elts, i);
1630 marshal_write_expr(buf, off, (expr_ty)elt);
1631 }
1632 marshal_write_expr_context(buf, off, o->v.Tuple.ctx);
1633 break;
1634 }
1635 return 1;
1636}
1637
Neal Norwitz6576bd82005-11-13 18:41:28 +00001638static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001639marshal_write_expr_context(PyObject **buf, int *off, expr_context_ty o)
1640{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001641 switch (o) {
1642 case Load:
1643 marshal_write_int(buf, off, 1);
1644 break;
1645 case Store:
1646 marshal_write_int(buf, off, 2);
1647 break;
1648 case Del:
1649 marshal_write_int(buf, off, 3);
1650 break;
1651 case AugLoad:
1652 marshal_write_int(buf, off, 4);
1653 break;
1654 case AugStore:
1655 marshal_write_int(buf, off, 5);
1656 break;
1657 case Param:
1658 marshal_write_int(buf, off, 6);
1659 break;
1660 }
1661 return 1;
1662}
1663
Neal Norwitz6576bd82005-11-13 18:41:28 +00001664static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001665marshal_write_slice(PyObject **buf, int *off, slice_ty o)
1666{
1667 int i;
1668 switch (o->kind) {
1669 case Ellipsis_kind:
1670 marshal_write_int(buf, off, 1);
1671 break;
1672 case Slice_kind:
1673 marshal_write_int(buf, off, 2);
1674 if (o->v.Slice.lower) {
1675 marshal_write_int(buf, off, 1);
1676 marshal_write_expr(buf, off, o->v.Slice.lower);
1677 }
1678 else {
1679 marshal_write_int(buf, off, 0);
1680 }
1681 if (o->v.Slice.upper) {
1682 marshal_write_int(buf, off, 1);
1683 marshal_write_expr(buf, off, o->v.Slice.upper);
1684 }
1685 else {
1686 marshal_write_int(buf, off, 0);
1687 }
1688 if (o->v.Slice.step) {
1689 marshal_write_int(buf, off, 1);
1690 marshal_write_expr(buf, off, o->v.Slice.step);
1691 }
1692 else {
1693 marshal_write_int(buf, off, 0);
1694 }
1695 break;
1696 case ExtSlice_kind:
1697 marshal_write_int(buf, off, 3);
1698 marshal_write_int(buf, off, asdl_seq_LEN(o->v.ExtSlice.dims));
1699 for (i = 0; i < asdl_seq_LEN(o->v.ExtSlice.dims); i++) {
1700 void *elt = asdl_seq_GET(o->v.ExtSlice.dims, i);
1701 marshal_write_slice(buf, off, (slice_ty)elt);
1702 }
1703 break;
1704 case Index_kind:
1705 marshal_write_int(buf, off, 4);
1706 marshal_write_expr(buf, off, o->v.Index.value);
1707 break;
1708 }
1709 return 1;
1710}
1711
Neal Norwitz6576bd82005-11-13 18:41:28 +00001712static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001713marshal_write_boolop(PyObject **buf, int *off, boolop_ty o)
1714{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001715 switch (o) {
1716 case And:
1717 marshal_write_int(buf, off, 1);
1718 break;
1719 case Or:
1720 marshal_write_int(buf, off, 2);
1721 break;
1722 }
1723 return 1;
1724}
1725
Neal Norwitz6576bd82005-11-13 18:41:28 +00001726static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001727marshal_write_operator(PyObject **buf, int *off, operator_ty o)
1728{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001729 switch (o) {
1730 case Add:
1731 marshal_write_int(buf, off, 1);
1732 break;
1733 case Sub:
1734 marshal_write_int(buf, off, 2);
1735 break;
1736 case Mult:
1737 marshal_write_int(buf, off, 3);
1738 break;
1739 case Div:
1740 marshal_write_int(buf, off, 4);
1741 break;
1742 case Mod:
1743 marshal_write_int(buf, off, 5);
1744 break;
1745 case Pow:
1746 marshal_write_int(buf, off, 6);
1747 break;
1748 case LShift:
1749 marshal_write_int(buf, off, 7);
1750 break;
1751 case RShift:
1752 marshal_write_int(buf, off, 8);
1753 break;
1754 case BitOr:
1755 marshal_write_int(buf, off, 9);
1756 break;
1757 case BitXor:
1758 marshal_write_int(buf, off, 10);
1759 break;
1760 case BitAnd:
1761 marshal_write_int(buf, off, 11);
1762 break;
1763 case FloorDiv:
1764 marshal_write_int(buf, off, 12);
1765 break;
1766 }
1767 return 1;
1768}
1769
Neal Norwitz6576bd82005-11-13 18:41:28 +00001770static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001771marshal_write_unaryop(PyObject **buf, int *off, unaryop_ty o)
1772{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001773 switch (o) {
1774 case Invert:
1775 marshal_write_int(buf, off, 1);
1776 break;
1777 case Not:
1778 marshal_write_int(buf, off, 2);
1779 break;
1780 case UAdd:
1781 marshal_write_int(buf, off, 3);
1782 break;
1783 case USub:
1784 marshal_write_int(buf, off, 4);
1785 break;
1786 }
1787 return 1;
1788}
1789
Neal Norwitz6576bd82005-11-13 18:41:28 +00001790static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001791marshal_write_cmpop(PyObject **buf, int *off, cmpop_ty o)
1792{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001793 switch (o) {
1794 case Eq:
1795 marshal_write_int(buf, off, 1);
1796 break;
1797 case NotEq:
1798 marshal_write_int(buf, off, 2);
1799 break;
1800 case Lt:
1801 marshal_write_int(buf, off, 3);
1802 break;
1803 case LtE:
1804 marshal_write_int(buf, off, 4);
1805 break;
1806 case Gt:
1807 marshal_write_int(buf, off, 5);
1808 break;
1809 case GtE:
1810 marshal_write_int(buf, off, 6);
1811 break;
1812 case Is:
1813 marshal_write_int(buf, off, 7);
1814 break;
1815 case IsNot:
1816 marshal_write_int(buf, off, 8);
1817 break;
1818 case In:
1819 marshal_write_int(buf, off, 9);
1820 break;
1821 case NotIn:
1822 marshal_write_int(buf, off, 10);
1823 break;
1824 }
1825 return 1;
1826}
1827
Neal Norwitz6576bd82005-11-13 18:41:28 +00001828static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001829marshal_write_comprehension(PyObject **buf, int *off, comprehension_ty o)
1830{
1831 int i;
1832 marshal_write_expr(buf, off, o->target);
1833 marshal_write_expr(buf, off, o->iter);
1834 marshal_write_int(buf, off, asdl_seq_LEN(o->ifs));
1835 for (i = 0; i < asdl_seq_LEN(o->ifs); i++) {
1836 void *elt = asdl_seq_GET(o->ifs, i);
1837 marshal_write_expr(buf, off, (expr_ty)elt);
1838 }
1839 return 1;
1840}
1841
Neal Norwitz6576bd82005-11-13 18:41:28 +00001842static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001843marshal_write_excepthandler(PyObject **buf, int *off, excepthandler_ty o)
1844{
1845 int i;
1846 if (o->type) {
1847 marshal_write_int(buf, off, 1);
1848 marshal_write_expr(buf, off, o->type);
1849 }
1850 else {
1851 marshal_write_int(buf, off, 0);
1852 }
1853 if (o->name) {
1854 marshal_write_int(buf, off, 1);
1855 marshal_write_expr(buf, off, o->name);
1856 }
1857 else {
1858 marshal_write_int(buf, off, 0);
1859 }
1860 marshal_write_int(buf, off, asdl_seq_LEN(o->body));
1861 for (i = 0; i < asdl_seq_LEN(o->body); i++) {
1862 void *elt = asdl_seq_GET(o->body, i);
1863 marshal_write_stmt(buf, off, (stmt_ty)elt);
1864 }
1865 return 1;
1866}
1867
Neal Norwitz6576bd82005-11-13 18:41:28 +00001868static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001869marshal_write_arguments(PyObject **buf, int *off, arguments_ty o)
1870{
1871 int i;
1872 marshal_write_int(buf, off, asdl_seq_LEN(o->args));
1873 for (i = 0; i < asdl_seq_LEN(o->args); i++) {
1874 void *elt = asdl_seq_GET(o->args, i);
1875 marshal_write_expr(buf, off, (expr_ty)elt);
1876 }
1877 if (o->vararg) {
1878 marshal_write_int(buf, off, 1);
1879 marshal_write_identifier(buf, off, o->vararg);
1880 }
1881 else {
1882 marshal_write_int(buf, off, 0);
1883 }
1884 if (o->kwarg) {
1885 marshal_write_int(buf, off, 1);
1886 marshal_write_identifier(buf, off, o->kwarg);
1887 }
1888 else {
1889 marshal_write_int(buf, off, 0);
1890 }
1891 marshal_write_int(buf, off, asdl_seq_LEN(o->defaults));
1892 for (i = 0; i < asdl_seq_LEN(o->defaults); i++) {
1893 void *elt = asdl_seq_GET(o->defaults, i);
1894 marshal_write_expr(buf, off, (expr_ty)elt);
1895 }
1896 return 1;
1897}
1898
Neal Norwitz6576bd82005-11-13 18:41:28 +00001899static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001900marshal_write_keyword(PyObject **buf, int *off, keyword_ty o)
1901{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001902 marshal_write_identifier(buf, off, o->arg);
1903 marshal_write_expr(buf, off, o->value);
1904 return 1;
1905}
1906
Neal Norwitz6576bd82005-11-13 18:41:28 +00001907static int
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001908marshal_write_alias(PyObject **buf, int *off, alias_ty o)
1909{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001910 marshal_write_identifier(buf, off, o->name);
1911 if (o->asname) {
1912 marshal_write_int(buf, off, 1);
1913 marshal_write_identifier(buf, off, o->asname);
1914 }
1915 else {
1916 marshal_write_int(buf, off, 0);
1917 }
1918 return 1;
1919}
1920
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001921