summaryrefslogtreecommitdiffstats
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2005-10-20 19:59:25 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2005-10-20 19:59:25 (GMT)
commit3e0055f8c65c407e74ce476b8e2b1fb889723514 (patch)
tree169cce8c87033e15364b57de947073e6e9c34d59 /Python/Python-ast.c
parent2cb94aba122b86dcda87d437eb36a860d14393d5 (diff)
downloadcpython-3e0055f8c65c407e74ce476b8e2b1fb889723514.zip
cpython-3e0055f8c65c407e74ce476b8e2b1fb889723514.tar.gz
cpython-3e0055f8c65c407e74ce476b8e2b1fb889723514.tar.bz2
Merge ast-branch to head
This change implements a new bytecode compiler, based on a transformation of the parse tree to an abstract syntax defined in Parser/Python.asdl. The compiler implementation is not complete, but it is in stable enough shape to run the entire test suite excepting two disabled tests.
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c2281
1 files changed, 2281 insertions, 0 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
new file mode 100644
index 0000000..e82b61c
--- /dev/null
+++ b/Python/Python-ast.c
@@ -0,0 +1,2281 @@
+/* File automatically generated by ../Parser/asdl_c.py */
+
+#include "Python.h"
+#include "Python-ast.h"
+
+mod_ty
+Module(asdl_seq * body)
+{
+ mod_ty p;
+ p = (mod_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Module_kind;
+ p->v.Module.body = body;
+ return p;
+}
+
+mod_ty
+Interactive(asdl_seq * body)
+{
+ mod_ty p;
+ p = (mod_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Interactive_kind;
+ p->v.Interactive.body = body;
+ return p;
+}
+
+mod_ty
+Expression(expr_ty body)
+{
+ mod_ty p;
+ if (!body) {
+ PyErr_SetString(PyExc_ValueError,
+ "field body is required for Expression");
+ return NULL;
+ }
+ p = (mod_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Expression_kind;
+ p->v.Expression.body = body;
+ return p;
+}
+
+mod_ty
+Suite(asdl_seq * body)
+{
+ mod_ty p;
+ p = (mod_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Suite_kind;
+ p->v.Suite.body = body;
+ return p;
+}
+
+stmt_ty
+FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
+ decorators, int lineno)
+{
+ stmt_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field name is required for FunctionDef");
+ return NULL;
+ }
+ if (!args) {
+ PyErr_SetString(PyExc_ValueError,
+ "field args is required for FunctionDef");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = FunctionDef_kind;
+ p->v.FunctionDef.name = name;
+ p->v.FunctionDef.args = args;
+ p->v.FunctionDef.body = body;
+ p->v.FunctionDef.decorators = decorators;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno)
+{
+ stmt_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field name is required for ClassDef");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = ClassDef_kind;
+ p->v.ClassDef.name = name;
+ p->v.ClassDef.bases = bases;
+ p->v.ClassDef.body = body;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Return(expr_ty value, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Return_kind;
+ p->v.Return.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Delete(asdl_seq * targets, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Delete_kind;
+ p->v.Delete.targets = targets;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Assign(asdl_seq * targets, expr_ty value, int lineno)
+{
+ stmt_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Assign");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Assign_kind;
+ p->v.Assign.targets = targets;
+ p->v.Assign.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno)
+{
+ stmt_ty p;
+ if (!target) {
+ PyErr_SetString(PyExc_ValueError,
+ "field target is required for AugAssign");
+ return NULL;
+ }
+ if (!op) {
+ PyErr_SetString(PyExc_ValueError,
+ "field op is required for AugAssign");
+ return NULL;
+ }
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for AugAssign");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = AugAssign_kind;
+ p->v.AugAssign.target = target;
+ p->v.AugAssign.op = op;
+ p->v.AugAssign.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Print(expr_ty dest, asdl_seq * values, bool nl, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Print_kind;
+ p->v.Print.dest = dest;
+ p->v.Print.values = values;
+ p->v.Print.nl = nl;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
+ lineno)
+{
+ stmt_ty p;
+ if (!target) {
+ PyErr_SetString(PyExc_ValueError,
+ "field target is required for For");
+ return NULL;
+ }
+ if (!iter) {
+ PyErr_SetString(PyExc_ValueError,
+ "field iter is required for For");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = For_kind;
+ p->v.For.target = target;
+ p->v.For.iter = iter;
+ p->v.For.body = body;
+ p->v.For.orelse = orelse;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno)
+{
+ stmt_ty p;
+ if (!test) {
+ PyErr_SetString(PyExc_ValueError,
+ "field test is required for While");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = While_kind;
+ p->v.While.test = test;
+ p->v.While.body = body;
+ p->v.While.orelse = orelse;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno)
+{
+ stmt_ty p;
+ if (!test) {
+ PyErr_SetString(PyExc_ValueError,
+ "field test is required for If");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = If_kind;
+ p->v.If.test = test;
+ p->v.If.body = body;
+ p->v.If.orelse = orelse;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Raise_kind;
+ p->v.Raise.type = type;
+ p->v.Raise.inst = inst;
+ p->v.Raise.tback = tback;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = TryExcept_kind;
+ p->v.TryExcept.body = body;
+ p->v.TryExcept.handlers = handlers;
+ p->v.TryExcept.orelse = orelse;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = TryFinally_kind;
+ p->v.TryFinally.body = body;
+ p->v.TryFinally.finalbody = finalbody;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Assert(expr_ty test, expr_ty msg, int lineno)
+{
+ stmt_ty p;
+ if (!test) {
+ PyErr_SetString(PyExc_ValueError,
+ "field test is required for Assert");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Assert_kind;
+ p->v.Assert.test = test;
+ p->v.Assert.msg = msg;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Import(asdl_seq * names, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Import_kind;
+ p->v.Import.names = names;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+ImportFrom(identifier module, asdl_seq * names, int lineno)
+{
+ stmt_ty p;
+ if (!module) {
+ PyErr_SetString(PyExc_ValueError,
+ "field module is required for ImportFrom");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = ImportFrom_kind;
+ p->v.ImportFrom.module = module;
+ p->v.ImportFrom.names = names;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno)
+{
+ stmt_ty p;
+ if (!body) {
+ PyErr_SetString(PyExc_ValueError,
+ "field body is required for Exec");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Exec_kind;
+ p->v.Exec.body = body;
+ p->v.Exec.globals = globals;
+ p->v.Exec.locals = locals;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Global(asdl_seq * names, int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Global_kind;
+ p->v.Global.names = names;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Expr(expr_ty value, int lineno)
+{
+ stmt_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Expr");
+ return NULL;
+ }
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Expr_kind;
+ p->v.Expr.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Pass(int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Pass_kind;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Break(int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Break_kind;
+ p->lineno = lineno;
+ return p;
+}
+
+stmt_ty
+Continue(int lineno)
+{
+ stmt_ty p;
+ p = (stmt_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Continue_kind;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+BoolOp(boolop_ty op, asdl_seq * values, int lineno)
+{
+ expr_ty p;
+ if (!op) {
+ PyErr_SetString(PyExc_ValueError,
+ "field op is required for BoolOp");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = BoolOp_kind;
+ p->v.BoolOp.op = op;
+ p->v.BoolOp.values = values;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno)
+{
+ expr_ty p;
+ if (!left) {
+ PyErr_SetString(PyExc_ValueError,
+ "field left is required for BinOp");
+ return NULL;
+ }
+ if (!op) {
+ PyErr_SetString(PyExc_ValueError,
+ "field op is required for BinOp");
+ return NULL;
+ }
+ if (!right) {
+ PyErr_SetString(PyExc_ValueError,
+ "field right is required for BinOp");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = BinOp_kind;
+ p->v.BinOp.left = left;
+ p->v.BinOp.op = op;
+ p->v.BinOp.right = right;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+UnaryOp(unaryop_ty op, expr_ty operand, int lineno)
+{
+ expr_ty p;
+ if (!op) {
+ PyErr_SetString(PyExc_ValueError,
+ "field op is required for UnaryOp");
+ return NULL;
+ }
+ if (!operand) {
+ PyErr_SetString(PyExc_ValueError,
+ "field operand is required for UnaryOp");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = UnaryOp_kind;
+ p->v.UnaryOp.op = op;
+ p->v.UnaryOp.operand = operand;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Lambda(arguments_ty args, expr_ty body, int lineno)
+{
+ expr_ty p;
+ if (!args) {
+ PyErr_SetString(PyExc_ValueError,
+ "field args is required for Lambda");
+ return NULL;
+ }
+ if (!body) {
+ PyErr_SetString(PyExc_ValueError,
+ "field body is required for Lambda");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Lambda_kind;
+ p->v.Lambda.args = args;
+ p->v.Lambda.body = body;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Dict(asdl_seq * keys, asdl_seq * values, int lineno)
+{
+ expr_ty p;
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Dict_kind;
+ p->v.Dict.keys = keys;
+ p->v.Dict.values = values;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+ListComp(expr_ty elt, asdl_seq * generators, int lineno)
+{
+ expr_ty p;
+ if (!elt) {
+ PyErr_SetString(PyExc_ValueError,
+ "field elt is required for ListComp");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = ListComp_kind;
+ p->v.ListComp.elt = elt;
+ p->v.ListComp.generators = generators;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno)
+{
+ expr_ty p;
+ if (!elt) {
+ PyErr_SetString(PyExc_ValueError,
+ "field elt is required for GeneratorExp");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = GeneratorExp_kind;
+ p->v.GeneratorExp.elt = elt;
+ p->v.GeneratorExp.generators = generators;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Yield(expr_ty value, int lineno)
+{
+ expr_ty p;
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Yield_kind;
+ p->v.Yield.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int lineno)
+{
+ expr_ty p;
+ if (!left) {
+ PyErr_SetString(PyExc_ValueError,
+ "field left is required for Compare");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Compare_kind;
+ p->v.Compare.left = left;
+ p->v.Compare.ops = ops;
+ p->v.Compare.comparators = comparators;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
+ expr_ty kwargs, int lineno)
+{
+ expr_ty p;
+ if (!func) {
+ PyErr_SetString(PyExc_ValueError,
+ "field func is required for Call");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Call_kind;
+ p->v.Call.func = func;
+ p->v.Call.args = args;
+ p->v.Call.keywords = keywords;
+ p->v.Call.starargs = starargs;
+ p->v.Call.kwargs = kwargs;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Repr(expr_ty value, int lineno)
+{
+ expr_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Repr");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Repr_kind;
+ p->v.Repr.value = value;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Num(object n, int lineno)
+{
+ expr_ty p;
+ if (!n) {
+ PyErr_SetString(PyExc_ValueError,
+ "field n is required for Num");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Num_kind;
+ p->v.Num.n = n;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Str(string s, int lineno)
+{
+ expr_ty p;
+ if (!s) {
+ PyErr_SetString(PyExc_ValueError,
+ "field s is required for Str");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Str_kind;
+ p->v.Str.s = s;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno)
+{
+ expr_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Attribute");
+ return NULL;
+ }
+ if (!attr) {
+ PyErr_SetString(PyExc_ValueError,
+ "field attr is required for Attribute");
+ return NULL;
+ }
+ if (!ctx) {
+ PyErr_SetString(PyExc_ValueError,
+ "field ctx is required for Attribute");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Attribute_kind;
+ p->v.Attribute.value = value;
+ p->v.Attribute.attr = attr;
+ p->v.Attribute.ctx = ctx;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno)
+{
+ expr_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Subscript");
+ return NULL;
+ }
+ if (!slice) {
+ PyErr_SetString(PyExc_ValueError,
+ "field slice is required for Subscript");
+ return NULL;
+ }
+ if (!ctx) {
+ PyErr_SetString(PyExc_ValueError,
+ "field ctx is required for Subscript");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Subscript_kind;
+ p->v.Subscript.value = value;
+ p->v.Subscript.slice = slice;
+ p->v.Subscript.ctx = ctx;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Name(identifier id, expr_context_ty ctx, int lineno)
+{
+ expr_ty p;
+ if (!id) {
+ PyErr_SetString(PyExc_ValueError,
+ "field id is required for Name");
+ return NULL;
+ }
+ if (!ctx) {
+ PyErr_SetString(PyExc_ValueError,
+ "field ctx is required for Name");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Name_kind;
+ p->v.Name.id = id;
+ p->v.Name.ctx = ctx;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+List(asdl_seq * elts, expr_context_ty ctx, int lineno)
+{
+ expr_ty p;
+ if (!ctx) {
+ PyErr_SetString(PyExc_ValueError,
+ "field ctx is required for List");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = List_kind;
+ p->v.List.elts = elts;
+ p->v.List.ctx = ctx;
+ p->lineno = lineno;
+ return p;
+}
+
+expr_ty
+Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno)
+{
+ expr_ty p;
+ if (!ctx) {
+ PyErr_SetString(PyExc_ValueError,
+ "field ctx is required for Tuple");
+ return NULL;
+ }
+ p = (expr_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Tuple_kind;
+ p->v.Tuple.elts = elts;
+ p->v.Tuple.ctx = ctx;
+ p->lineno = lineno;
+ return p;
+}
+
+slice_ty
+Ellipsis()
+{
+ slice_ty p;
+ p = (slice_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Ellipsis_kind;
+ return p;
+}
+
+slice_ty
+Slice(expr_ty lower, expr_ty upper, expr_ty step)
+{
+ slice_ty p;
+ p = (slice_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Slice_kind;
+ p->v.Slice.lower = lower;
+ p->v.Slice.upper = upper;
+ p->v.Slice.step = step;
+ return p;
+}
+
+slice_ty
+ExtSlice(asdl_seq * dims)
+{
+ slice_ty p;
+ p = (slice_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = ExtSlice_kind;
+ p->v.ExtSlice.dims = dims;
+ return p;
+}
+
+slice_ty
+Index(expr_ty value)
+{
+ slice_ty p;
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for Index");
+ return NULL;
+ }
+ p = (slice_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->kind = Index_kind;
+ p->v.Index.value = value;
+ return p;
+}
+
+comprehension_ty
+comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs)
+{
+ comprehension_ty p;
+ if (!target) {
+ PyErr_SetString(PyExc_ValueError,
+ "field target is required for comprehension");
+ return NULL;
+ }
+ if (!iter) {
+ PyErr_SetString(PyExc_ValueError,
+ "field iter is required for comprehension");
+ return NULL;
+ }
+ p = (comprehension_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->target = target;
+ p->iter = iter;
+ p->ifs = ifs;
+ return p;
+}
+
+excepthandler_ty
+excepthandler(expr_ty type, expr_ty name, asdl_seq * body)
+{
+ excepthandler_ty p;
+ p = (excepthandler_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->type = type;
+ p->name = name;
+ p->body = body;
+ return p;
+}
+
+arguments_ty
+arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
+ defaults)
+{
+ arguments_ty p;
+ p = (arguments_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->args = args;
+ p->vararg = vararg;
+ p->kwarg = kwarg;
+ p->defaults = defaults;
+ return p;
+}
+
+keyword_ty
+keyword(identifier arg, expr_ty value)
+{
+ keyword_ty p;
+ if (!arg) {
+ PyErr_SetString(PyExc_ValueError,
+ "field arg is required for keyword");
+ return NULL;
+ }
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field value is required for keyword");
+ return NULL;
+ }
+ p = (keyword_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->arg = arg;
+ p->value = value;
+ return p;
+}
+
+alias_ty
+alias(identifier name, identifier asname)
+{
+ alias_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field name is required for alias");
+ return NULL;
+ }
+ p = (alias_ty)malloc(sizeof(*p));
+ if (!p) {
+ PyErr_SetString(PyExc_MemoryError, "no memory");
+ return NULL;
+ }
+ p->name = name;
+ p->asname = asname;
+ return p;
+}
+
+static void
+free_seq_exprs(asdl_seq *seq)
+{
+ int i, n;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr((expr_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+}
+
+static void
+free_seq_stmts(asdl_seq *seq)
+{
+ int i, n;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt((stmt_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+}
+
+void
+free_mod(mod_ty o)
+{
+ if (!o)
+ return;
+
+ switch (o->kind) {
+ case Module_kind:
+ free_seq_stmts(o->v.Module.body);
+ break;
+ case Interactive_kind:
+ free_seq_stmts(o->v.Interactive.body);
+ break;
+ case Expression_kind:
+ free_expr((expr_ty)o->v.Expression.body);
+ break;
+ case Suite_kind:
+ free_seq_stmts(o->v.Suite.body);
+ break;
+ }
+
+ free(o);
+}
+
+void
+free_stmt(stmt_ty o)
+{
+ int i, n;
+ asdl_seq *seq;
+
+ if (!o)
+ return;
+
+ switch (o->kind) {
+ case FunctionDef_kind:
+ Py_DECREF((identifier)o->v.FunctionDef.name);
+ free_arguments((arguments_ty)o->v.FunctionDef.args);
+ free_seq_stmts(o->v.FunctionDef.body);
+ free_seq_exprs(o->v.FunctionDef.decorators);
+ break;
+ case ClassDef_kind:
+ Py_DECREF((identifier)o->v.ClassDef.name);
+ free_seq_exprs(o->v.ClassDef.bases);
+ free_seq_stmts(o->v.ClassDef.body);
+ break;
+ case Return_kind:
+ if (o->v.Return.value) {
+ free_expr((expr_ty)o->v.Return.value);
+ }
+ break;
+ case Delete_kind:
+ free_seq_exprs(o->v.Delete.targets);
+ break;
+ case Assign_kind:
+ free_seq_exprs(o->v.Assign.targets);
+ free_expr((expr_ty)o->v.Assign.value);
+ break;
+ case AugAssign_kind:
+ free_expr((expr_ty)o->v.AugAssign.target);
+ free_operator((operator_ty)o->v.AugAssign.op);
+ free_expr((expr_ty)o->v.AugAssign.value);
+ break;
+ case Print_kind:
+ if (o->v.Print.dest) {
+ free_expr((expr_ty)o->v.Print.dest);
+ }
+ free_seq_exprs(o->v.Print.values);
+ break;
+ case For_kind:
+ free_expr((expr_ty)o->v.For.target);
+ free_expr((expr_ty)o->v.For.iter);
+ free_seq_stmts(o->v.For.body);
+ free_seq_stmts(o->v.For.orelse);
+ break;
+ case While_kind:
+ free_expr((expr_ty)o->v.While.test);
+ free_seq_stmts(o->v.While.body);
+ free_seq_stmts(o->v.While.orelse);
+ break;
+ case If_kind:
+ free_expr((expr_ty)o->v.If.test);
+ free_seq_stmts(o->v.If.body);
+ free_seq_stmts(o->v.If.orelse);
+ break;
+ case Raise_kind:
+ if (o->v.Raise.type) {
+ free_expr((expr_ty)o->v.Raise.type);
+ }
+ if (o->v.Raise.inst) {
+ free_expr((expr_ty)o->v.Raise.inst);
+ }
+ if (o->v.Raise.tback) {
+ free_expr((expr_ty)o->v.Raise.tback);
+ }
+ break;
+ case TryExcept_kind:
+ free_seq_stmts(o->v.TryExcept.body);
+ seq = o->v.TryExcept.handlers;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_excepthandler((excepthandler_ty)asdl_seq_GET(seq,
+ i));
+ asdl_seq_free(seq);
+ free_seq_stmts(o->v.TryExcept.orelse);
+ break;
+ case TryFinally_kind:
+ free_seq_stmts(o->v.TryFinally.body);
+ free_seq_stmts(o->v.TryFinally.finalbody);
+ break;
+ case Assert_kind:
+ free_expr((expr_ty)o->v.Assert.test);
+ if (o->v.Assert.msg) {
+ free_expr((expr_ty)o->v.Assert.msg);
+ }
+ break;
+ case Import_kind:
+ seq = o->v.Import.names;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_alias((alias_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ break;
+ case ImportFrom_kind:
+ Py_DECREF((identifier)o->v.ImportFrom.module);
+ seq = o->v.ImportFrom.names;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_alias((alias_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ break;
+ case Exec_kind:
+ free_expr((expr_ty)o->v.Exec.body);
+ if (o->v.Exec.globals) {
+ free_expr((expr_ty)o->v.Exec.globals);
+ }
+ if (o->v.Exec.locals) {
+ free_expr((expr_ty)o->v.Exec.locals);
+ }
+ break;
+ case Global_kind:
+ seq = o->v.Global.names;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ Py_DECREF((identifier)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ break;
+ case Expr_kind:
+ free_expr((expr_ty)o->v.Expr.value);
+ break;
+ case Pass_kind:
+ break;
+ case Break_kind:
+ break;
+ case Continue_kind:
+ break;
+ }
+
+ free(o);
+}
+
+void
+free_expr(expr_ty o)
+{
+ int i, n;
+ asdl_seq *seq;
+
+ if (!o)
+ return;
+
+ switch (o->kind) {
+ case BoolOp_kind:
+ free_boolop((boolop_ty)o->v.BoolOp.op);
+ free_seq_exprs(o->v.BoolOp.values);
+ break;
+ case BinOp_kind:
+ free_expr((expr_ty)o->v.BinOp.left);
+ free_operator((operator_ty)o->v.BinOp.op);
+ free_expr((expr_ty)o->v.BinOp.right);
+ break;
+ case UnaryOp_kind:
+ free_unaryop((unaryop_ty)o->v.UnaryOp.op);
+ free_expr((expr_ty)o->v.UnaryOp.operand);
+ break;
+ case Lambda_kind:
+ free_arguments((arguments_ty)o->v.Lambda.args);
+ free_expr((expr_ty)o->v.Lambda.body);
+ break;
+ case Dict_kind:
+ free_seq_exprs(o->v.Dict.keys);
+ free_seq_exprs(o->v.Dict.values);
+ break;
+ case ListComp_kind:
+ free_expr((expr_ty)o->v.ListComp.elt);
+ seq = o->v.ListComp.generators;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_comprehension((comprehension_ty)asdl_seq_GET(seq,
+ i));
+ asdl_seq_free(seq);
+ break;
+ case GeneratorExp_kind:
+ free_expr((expr_ty)o->v.GeneratorExp.elt);
+ seq = o->v.GeneratorExp.generators;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_comprehension((comprehension_ty)asdl_seq_GET(seq,
+ i));
+ asdl_seq_free(seq);
+ break;
+ case Yield_kind:
+ if (o->v.Yield.value) {
+ free_expr((expr_ty)o->v.Yield.value);
+ }
+ break;
+ case Compare_kind:
+ free_expr((expr_ty)o->v.Compare.left);
+ seq = o->v.Compare.ops;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_cmpop((cmpop_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ free_seq_exprs(o->v.Compare.comparators);
+ break;
+ case Call_kind:
+ free_expr((expr_ty)o->v.Call.func);
+ free_seq_exprs(o->v.Call.args);
+ seq = o->v.Call.keywords;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_keyword((keyword_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ if (o->v.Call.starargs) {
+ free_expr((expr_ty)o->v.Call.starargs);
+ }
+ if (o->v.Call.kwargs) {
+ free_expr((expr_ty)o->v.Call.kwargs);
+ }
+ break;
+ case Repr_kind:
+ free_expr((expr_ty)o->v.Repr.value);
+ break;
+ case Num_kind:
+ Py_DECREF((object)o->v.Num.n);
+ break;
+ case Str_kind:
+ Py_DECREF((string)o->v.Str.s);
+ break;
+ case Attribute_kind:
+ free_expr((expr_ty)o->v.Attribute.value);
+ Py_DECREF((identifier)o->v.Attribute.attr);
+ free_expr_context((expr_context_ty)o->v.Attribute.ctx);
+ break;
+ case Subscript_kind:
+ free_expr((expr_ty)o->v.Subscript.value);
+ free_slice((slice_ty)o->v.Subscript.slice);
+ free_expr_context((expr_context_ty)o->v.Subscript.ctx);
+ break;
+ case Name_kind:
+ Py_DECREF((identifier)o->v.Name.id);
+ free_expr_context((expr_context_ty)o->v.Name.ctx);
+ break;
+ case List_kind:
+ free_seq_exprs(o->v.List.elts);
+ free_expr_context((expr_context_ty)o->v.List.ctx);
+ break;
+ case Tuple_kind:
+ free_seq_exprs(o->v.Tuple.elts);
+ free_expr_context((expr_context_ty)o->v.Tuple.ctx);
+ break;
+ }
+
+ free(o);
+}
+
+void
+free_expr_context(expr_context_ty o)
+{
+ if (!o)
+ return;
+
+}
+
+void
+free_slice(slice_ty o)
+{
+ int i, n;
+ asdl_seq *seq;
+
+ if (!o)
+ return;
+
+ switch (o->kind) {
+ case Ellipsis_kind:
+ break;
+ case Slice_kind:
+ if (o->v.Slice.lower) {
+ free_expr((expr_ty)o->v.Slice.lower);
+ }
+ if (o->v.Slice.upper) {
+ free_expr((expr_ty)o->v.Slice.upper);
+ }
+ if (o->v.Slice.step) {
+ free_expr((expr_ty)o->v.Slice.step);
+ }
+ break;
+ case ExtSlice_kind:
+ seq = o->v.ExtSlice.dims;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_slice((slice_ty)asdl_seq_GET(seq, i));
+ asdl_seq_free(seq);
+ break;
+ case Index_kind:
+ free_expr((expr_ty)o->v.Index.value);
+ break;
+ }
+
+ free(o);
+}
+
+void
+free_boolop(boolop_ty o)
+{
+ if (!o)
+ return;
+
+}
+
+void
+free_operator(operator_ty o)
+{
+ if (!o)
+ return;
+
+}
+
+void
+free_unaryop(unaryop_ty o)
+{
+ if (!o)
+ return;
+
+}
+
+void
+free_cmpop(cmpop_ty o)
+{
+ if (!o)
+ return;
+
+}
+
+void
+free_comprehension(comprehension_ty o)
+{
+ if (!o)
+ return;
+
+ free_expr((expr_ty)o->target);
+ free_expr((expr_ty)o->iter);
+ free_seq_exprs(o->ifs);
+
+ free(o);
+}
+
+void
+free_excepthandler(excepthandler_ty o)
+{
+ if (!o)
+ return;
+
+ if (o->type) {
+ free_expr((expr_ty)o->type);
+ }
+ if (o->name) {
+ free_expr((expr_ty)o->name);
+ }
+ free_seq_stmts(o->body);
+
+ free(o);
+}
+
+void
+free_arguments(arguments_ty o)
+{
+ if (!o)
+ return;
+
+ free_seq_exprs(o->args);
+ if (o->vararg) {
+ Py_DECREF((identifier)o->vararg);
+ }
+ if (o->kwarg) {
+ Py_DECREF((identifier)o->kwarg);
+ }
+ free_seq_exprs(o->defaults);
+
+ free(o);
+}
+
+void
+free_keyword(keyword_ty o)
+{
+ if (!o)
+ return;
+
+ Py_DECREF((identifier)o->arg);
+ free_expr((expr_ty)o->value);
+
+ free(o);
+}
+
+void
+free_alias(alias_ty o)
+{
+ if (!o)
+ return;
+
+ Py_DECREF((identifier)o->name);
+ if (o->asname) {
+ Py_DECREF((identifier)o->asname);
+ }
+
+ free(o);
+}
+
+int
+marshal_write_mod(PyObject **buf, int *off, mod_ty o)
+{
+ int i;
+ switch (o->kind) {
+ case Module_kind:
+ marshal_write_int(buf, off, 1);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Module.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.Module.body); i++) {
+ void *elt = asdl_seq_GET(o->v.Module.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case Interactive_kind:
+ marshal_write_int(buf, off, 2);
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.Interactive.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.Interactive.body); i++) {
+ void *elt = asdl_seq_GET(o->v.Interactive.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case Expression_kind:
+ marshal_write_int(buf, off, 3);
+ marshal_write_expr(buf, off, o->v.Expression.body);
+ break;
+ case Suite_kind:
+ marshal_write_int(buf, off, 4);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Suite.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.Suite.body); i++) {
+ void *elt = asdl_seq_GET(o->v.Suite.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_stmt(PyObject **buf, int *off, stmt_ty o)
+{
+ int i;
+ switch (o->kind) {
+ case FunctionDef_kind:
+ marshal_write_int(buf, off, 1);
+ marshal_write_identifier(buf, off, o->v.FunctionDef.name);
+ marshal_write_arguments(buf, off, o->v.FunctionDef.args);
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.FunctionDef.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.FunctionDef.body); i++) {
+ void *elt = asdl_seq_GET(o->v.FunctionDef.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.FunctionDef.decorators));
+ for (i = 0; i < asdl_seq_LEN(o->v.FunctionDef.decorators); i++)
+ {
+ void *elt = asdl_seq_GET(o->v.FunctionDef.decorators,
+ i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ break;
+ case ClassDef_kind:
+ marshal_write_int(buf, off, 2);
+ marshal_write_identifier(buf, off, o->v.ClassDef.name);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.ClassDef.bases));
+ for (i = 0; i < asdl_seq_LEN(o->v.ClassDef.bases); i++) {
+ void *elt = asdl_seq_GET(o->v.ClassDef.bases, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.ClassDef.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.ClassDef.body); i++) {
+ void *elt = asdl_seq_GET(o->v.ClassDef.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case Return_kind:
+ marshal_write_int(buf, off, 3);
+ if (o->v.Return.value) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Return.value);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case Delete_kind:
+ marshal_write_int(buf, off, 4);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Delete.targets));
+ for (i = 0; i < asdl_seq_LEN(o->v.Delete.targets); i++) {
+ void *elt = asdl_seq_GET(o->v.Delete.targets, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ break;
+ case Assign_kind:
+ marshal_write_int(buf, off, 5);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Assign.targets));
+ for (i = 0; i < asdl_seq_LEN(o->v.Assign.targets); i++) {
+ void *elt = asdl_seq_GET(o->v.Assign.targets, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_expr(buf, off, o->v.Assign.value);
+ break;
+ case AugAssign_kind:
+ marshal_write_int(buf, off, 6);
+ marshal_write_expr(buf, off, o->v.AugAssign.target);
+ marshal_write_operator(buf, off, o->v.AugAssign.op);
+ marshal_write_expr(buf, off, o->v.AugAssign.value);
+ break;
+ case Print_kind:
+ marshal_write_int(buf, off, 7);
+ if (o->v.Print.dest) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Print.dest);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Print.values));
+ for (i = 0; i < asdl_seq_LEN(o->v.Print.values); i++) {
+ void *elt = asdl_seq_GET(o->v.Print.values, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_bool(buf, off, o->v.Print.nl);
+ break;
+ case For_kind:
+ marshal_write_int(buf, off, 8);
+ marshal_write_expr(buf, off, o->v.For.target);
+ marshal_write_expr(buf, off, o->v.For.iter);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.For.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.For.body); i++) {
+ void *elt = asdl_seq_GET(o->v.For.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.For.orelse));
+ for (i = 0; i < asdl_seq_LEN(o->v.For.orelse); i++) {
+ void *elt = asdl_seq_GET(o->v.For.orelse, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case While_kind:
+ marshal_write_int(buf, off, 9);
+ marshal_write_expr(buf, off, o->v.While.test);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.While.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.While.body); i++) {
+ void *elt = asdl_seq_GET(o->v.While.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.While.orelse));
+ for (i = 0; i < asdl_seq_LEN(o->v.While.orelse); i++) {
+ void *elt = asdl_seq_GET(o->v.While.orelse, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case If_kind:
+ marshal_write_int(buf, off, 10);
+ marshal_write_expr(buf, off, o->v.If.test);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.If.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.If.body); i++) {
+ void *elt = asdl_seq_GET(o->v.If.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.If.orelse));
+ for (i = 0; i < asdl_seq_LEN(o->v.If.orelse); i++) {
+ void *elt = asdl_seq_GET(o->v.If.orelse, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case Raise_kind:
+ marshal_write_int(buf, off, 11);
+ if (o->v.Raise.type) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Raise.type);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Raise.inst) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Raise.inst);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Raise.tback) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Raise.tback);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case TryExcept_kind:
+ marshal_write_int(buf, off, 12);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.TryExcept.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.body); i++) {
+ void *elt = asdl_seq_GET(o->v.TryExcept.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.TryExcept.handlers));
+ for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.handlers); i++) {
+ void *elt = asdl_seq_GET(o->v.TryExcept.handlers, i);
+ marshal_write_excepthandler(buf, off,
+ (excepthandler_ty)elt);
+ }
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.TryExcept.orelse));
+ for (i = 0; i < asdl_seq_LEN(o->v.TryExcept.orelse); i++) {
+ void *elt = asdl_seq_GET(o->v.TryExcept.orelse, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case TryFinally_kind:
+ marshal_write_int(buf, off, 13);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.TryFinally.body));
+ for (i = 0; i < asdl_seq_LEN(o->v.TryFinally.body); i++) {
+ void *elt = asdl_seq_GET(o->v.TryFinally.body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.TryFinally.finalbody));
+ for (i = 0; i < asdl_seq_LEN(o->v.TryFinally.finalbody); i++) {
+ void *elt = asdl_seq_GET(o->v.TryFinally.finalbody, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ break;
+ case Assert_kind:
+ marshal_write_int(buf, off, 14);
+ marshal_write_expr(buf, off, o->v.Assert.test);
+ if (o->v.Assert.msg) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Assert.msg);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case Import_kind:
+ marshal_write_int(buf, off, 15);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Import.names));
+ for (i = 0; i < asdl_seq_LEN(o->v.Import.names); i++) {
+ void *elt = asdl_seq_GET(o->v.Import.names, i);
+ marshal_write_alias(buf, off, (alias_ty)elt);
+ }
+ break;
+ case ImportFrom_kind:
+ marshal_write_int(buf, off, 16);
+ marshal_write_identifier(buf, off, o->v.ImportFrom.module);
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.ImportFrom.names));
+ for (i = 0; i < asdl_seq_LEN(o->v.ImportFrom.names); i++) {
+ void *elt = asdl_seq_GET(o->v.ImportFrom.names, i);
+ marshal_write_alias(buf, off, (alias_ty)elt);
+ }
+ break;
+ case Exec_kind:
+ marshal_write_int(buf, off, 17);
+ marshal_write_expr(buf, off, o->v.Exec.body);
+ if (o->v.Exec.globals) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Exec.globals);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Exec.locals) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Exec.locals);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case Global_kind:
+ marshal_write_int(buf, off, 18);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Global.names));
+ for (i = 0; i < asdl_seq_LEN(o->v.Global.names); i++) {
+ void *elt = asdl_seq_GET(o->v.Global.names, i);
+ marshal_write_identifier(buf, off, (identifier)elt);
+ }
+ break;
+ case Expr_kind:
+ marshal_write_int(buf, off, 19);
+ marshal_write_expr(buf, off, o->v.Expr.value);
+ break;
+ case Pass_kind:
+ marshal_write_int(buf, off, 20);
+ break;
+ case Break_kind:
+ marshal_write_int(buf, off, 21);
+ break;
+ case Continue_kind:
+ marshal_write_int(buf, off, 22);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_expr(PyObject **buf, int *off, expr_ty o)
+{
+ int i;
+ switch (o->kind) {
+ case BoolOp_kind:
+ marshal_write_int(buf, off, 1);
+ marshal_write_boolop(buf, off, o->v.BoolOp.op);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.BoolOp.values));
+ for (i = 0; i < asdl_seq_LEN(o->v.BoolOp.values); i++) {
+ void *elt = asdl_seq_GET(o->v.BoolOp.values, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ break;
+ case BinOp_kind:
+ marshal_write_int(buf, off, 2);
+ marshal_write_expr(buf, off, o->v.BinOp.left);
+ marshal_write_operator(buf, off, o->v.BinOp.op);
+ marshal_write_expr(buf, off, o->v.BinOp.right);
+ break;
+ case UnaryOp_kind:
+ marshal_write_int(buf, off, 3);
+ marshal_write_unaryop(buf, off, o->v.UnaryOp.op);
+ marshal_write_expr(buf, off, o->v.UnaryOp.operand);
+ break;
+ case Lambda_kind:
+ marshal_write_int(buf, off, 4);
+ marshal_write_arguments(buf, off, o->v.Lambda.args);
+ marshal_write_expr(buf, off, o->v.Lambda.body);
+ break;
+ case Dict_kind:
+ marshal_write_int(buf, off, 5);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Dict.keys));
+ for (i = 0; i < asdl_seq_LEN(o->v.Dict.keys); i++) {
+ void *elt = asdl_seq_GET(o->v.Dict.keys, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Dict.values));
+ for (i = 0; i < asdl_seq_LEN(o->v.Dict.values); i++) {
+ void *elt = asdl_seq_GET(o->v.Dict.values, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ break;
+ case ListComp_kind:
+ marshal_write_int(buf, off, 6);
+ marshal_write_expr(buf, off, o->v.ListComp.elt);
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.ListComp.generators));
+ for (i = 0; i < asdl_seq_LEN(o->v.ListComp.generators); i++) {
+ void *elt = asdl_seq_GET(o->v.ListComp.generators, i);
+ marshal_write_comprehension(buf, off,
+ (comprehension_ty)elt);
+ }
+ break;
+ case GeneratorExp_kind:
+ marshal_write_int(buf, off, 7);
+ marshal_write_expr(buf, off, o->v.GeneratorExp.elt);
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.GeneratorExp.generators));
+ for (i = 0; i < asdl_seq_LEN(o->v.GeneratorExp.generators);
+ i++) {
+ void *elt = asdl_seq_GET(o->v.GeneratorExp.generators,
+ i);
+ marshal_write_comprehension(buf, off,
+ (comprehension_ty)elt);
+ }
+ break;
+ case Yield_kind:
+ marshal_write_int(buf, off, 8);
+ if (o->v.Yield.value) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Yield.value);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case Compare_kind:
+ marshal_write_int(buf, off, 9);
+ marshal_write_expr(buf, off, o->v.Compare.left);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Compare.ops));
+ for (i = 0; i < asdl_seq_LEN(o->v.Compare.ops); i++) {
+ void *elt = asdl_seq_GET(o->v.Compare.ops, i);
+ marshal_write_cmpop(buf, off, (cmpop_ty)elt);
+ }
+ marshal_write_int(buf, off,
+ asdl_seq_LEN(o->v.Compare.comparators));
+ for (i = 0; i < asdl_seq_LEN(o->v.Compare.comparators); i++) {
+ void *elt = asdl_seq_GET(o->v.Compare.comparators, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ break;
+ case Call_kind:
+ marshal_write_int(buf, off, 10);
+ marshal_write_expr(buf, off, o->v.Call.func);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Call.args));
+ for (i = 0; i < asdl_seq_LEN(o->v.Call.args); i++) {
+ void *elt = asdl_seq_GET(o->v.Call.args, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Call.keywords));
+ for (i = 0; i < asdl_seq_LEN(o->v.Call.keywords); i++) {
+ void *elt = asdl_seq_GET(o->v.Call.keywords, i);
+ marshal_write_keyword(buf, off, (keyword_ty)elt);
+ }
+ if (o->v.Call.starargs) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Call.starargs);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Call.kwargs) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Call.kwargs);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case Repr_kind:
+ marshal_write_int(buf, off, 11);
+ marshal_write_expr(buf, off, o->v.Repr.value);
+ break;
+ case Num_kind:
+ marshal_write_int(buf, off, 12);
+ marshal_write_object(buf, off, o->v.Num.n);
+ break;
+ case Str_kind:
+ marshal_write_int(buf, off, 13);
+ marshal_write_string(buf, off, o->v.Str.s);
+ break;
+ case Attribute_kind:
+ marshal_write_int(buf, off, 14);
+ marshal_write_expr(buf, off, o->v.Attribute.value);
+ marshal_write_identifier(buf, off, o->v.Attribute.attr);
+ marshal_write_expr_context(buf, off, o->v.Attribute.ctx);
+ break;
+ case Subscript_kind:
+ marshal_write_int(buf, off, 15);
+ marshal_write_expr(buf, off, o->v.Subscript.value);
+ marshal_write_slice(buf, off, o->v.Subscript.slice);
+ marshal_write_expr_context(buf, off, o->v.Subscript.ctx);
+ break;
+ case Name_kind:
+ marshal_write_int(buf, off, 16);
+ marshal_write_identifier(buf, off, o->v.Name.id);
+ marshal_write_expr_context(buf, off, o->v.Name.ctx);
+ break;
+ case List_kind:
+ marshal_write_int(buf, off, 17);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.List.elts));
+ for (i = 0; i < asdl_seq_LEN(o->v.List.elts); i++) {
+ void *elt = asdl_seq_GET(o->v.List.elts, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_expr_context(buf, off, o->v.List.ctx);
+ break;
+ case Tuple_kind:
+ marshal_write_int(buf, off, 18);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.Tuple.elts));
+ for (i = 0; i < asdl_seq_LEN(o->v.Tuple.elts); i++) {
+ void *elt = asdl_seq_GET(o->v.Tuple.elts, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ marshal_write_expr_context(buf, off, o->v.Tuple.ctx);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_expr_context(PyObject **buf, int *off, expr_context_ty o)
+{
+ int i;
+ switch (o) {
+ case Load:
+ marshal_write_int(buf, off, 1);
+ break;
+ case Store:
+ marshal_write_int(buf, off, 2);
+ break;
+ case Del:
+ marshal_write_int(buf, off, 3);
+ break;
+ case AugLoad:
+ marshal_write_int(buf, off, 4);
+ break;
+ case AugStore:
+ marshal_write_int(buf, off, 5);
+ break;
+ case Param:
+ marshal_write_int(buf, off, 6);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_slice(PyObject **buf, int *off, slice_ty o)
+{
+ int i;
+ switch (o->kind) {
+ case Ellipsis_kind:
+ marshal_write_int(buf, off, 1);
+ break;
+ case Slice_kind:
+ marshal_write_int(buf, off, 2);
+ if (o->v.Slice.lower) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Slice.lower);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Slice.upper) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Slice.upper);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->v.Slice.step) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->v.Slice.step);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ break;
+ case ExtSlice_kind:
+ marshal_write_int(buf, off, 3);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->v.ExtSlice.dims));
+ for (i = 0; i < asdl_seq_LEN(o->v.ExtSlice.dims); i++) {
+ void *elt = asdl_seq_GET(o->v.ExtSlice.dims, i);
+ marshal_write_slice(buf, off, (slice_ty)elt);
+ }
+ break;
+ case Index_kind:
+ marshal_write_int(buf, off, 4);
+ marshal_write_expr(buf, off, o->v.Index.value);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_boolop(PyObject **buf, int *off, boolop_ty o)
+{
+ int i;
+ switch (o) {
+ case And:
+ marshal_write_int(buf, off, 1);
+ break;
+ case Or:
+ marshal_write_int(buf, off, 2);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_operator(PyObject **buf, int *off, operator_ty o)
+{
+ int i;
+ switch (o) {
+ case Add:
+ marshal_write_int(buf, off, 1);
+ break;
+ case Sub:
+ marshal_write_int(buf, off, 2);
+ break;
+ case Mult:
+ marshal_write_int(buf, off, 3);
+ break;
+ case Div:
+ marshal_write_int(buf, off, 4);
+ break;
+ case Mod:
+ marshal_write_int(buf, off, 5);
+ break;
+ case Pow:
+ marshal_write_int(buf, off, 6);
+ break;
+ case LShift:
+ marshal_write_int(buf, off, 7);
+ break;
+ case RShift:
+ marshal_write_int(buf, off, 8);
+ break;
+ case BitOr:
+ marshal_write_int(buf, off, 9);
+ break;
+ case BitXor:
+ marshal_write_int(buf, off, 10);
+ break;
+ case BitAnd:
+ marshal_write_int(buf, off, 11);
+ break;
+ case FloorDiv:
+ marshal_write_int(buf, off, 12);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_unaryop(PyObject **buf, int *off, unaryop_ty o)
+{
+ int i;
+ switch (o) {
+ case Invert:
+ marshal_write_int(buf, off, 1);
+ break;
+ case Not:
+ marshal_write_int(buf, off, 2);
+ break;
+ case UAdd:
+ marshal_write_int(buf, off, 3);
+ break;
+ case USub:
+ marshal_write_int(buf, off, 4);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_cmpop(PyObject **buf, int *off, cmpop_ty o)
+{
+ int i;
+ switch (o) {
+ case Eq:
+ marshal_write_int(buf, off, 1);
+ break;
+ case NotEq:
+ marshal_write_int(buf, off, 2);
+ break;
+ case Lt:
+ marshal_write_int(buf, off, 3);
+ break;
+ case LtE:
+ marshal_write_int(buf, off, 4);
+ break;
+ case Gt:
+ marshal_write_int(buf, off, 5);
+ break;
+ case GtE:
+ marshal_write_int(buf, off, 6);
+ break;
+ case Is:
+ marshal_write_int(buf, off, 7);
+ break;
+ case IsNot:
+ marshal_write_int(buf, off, 8);
+ break;
+ case In:
+ marshal_write_int(buf, off, 9);
+ break;
+ case NotIn:
+ marshal_write_int(buf, off, 10);
+ break;
+ }
+ return 1;
+}
+
+int
+marshal_write_comprehension(PyObject **buf, int *off, comprehension_ty o)
+{
+ int i;
+ marshal_write_expr(buf, off, o->target);
+ marshal_write_expr(buf, off, o->iter);
+ marshal_write_int(buf, off, asdl_seq_LEN(o->ifs));
+ for (i = 0; i < asdl_seq_LEN(o->ifs); i++) {
+ void *elt = asdl_seq_GET(o->ifs, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ return 1;
+}
+
+int
+marshal_write_excepthandler(PyObject **buf, int *off, excepthandler_ty o)
+{
+ int i;
+ if (o->type) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->type);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->name) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_expr(buf, off, o->name);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->body));
+ for (i = 0; i < asdl_seq_LEN(o->body); i++) {
+ void *elt = asdl_seq_GET(o->body, i);
+ marshal_write_stmt(buf, off, (stmt_ty)elt);
+ }
+ return 1;
+}
+
+int
+marshal_write_arguments(PyObject **buf, int *off, arguments_ty o)
+{
+ int i;
+ marshal_write_int(buf, off, asdl_seq_LEN(o->args));
+ for (i = 0; i < asdl_seq_LEN(o->args); i++) {
+ void *elt = asdl_seq_GET(o->args, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ if (o->vararg) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_identifier(buf, off, o->vararg);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ if (o->kwarg) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_identifier(buf, off, o->kwarg);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ marshal_write_int(buf, off, asdl_seq_LEN(o->defaults));
+ for (i = 0; i < asdl_seq_LEN(o->defaults); i++) {
+ void *elt = asdl_seq_GET(o->defaults, i);
+ marshal_write_expr(buf, off, (expr_ty)elt);
+ }
+ return 1;
+}
+
+int
+marshal_write_keyword(PyObject **buf, int *off, keyword_ty o)
+{
+ int i;
+ marshal_write_identifier(buf, off, o->arg);
+ marshal_write_expr(buf, off, o->value);
+ return 1;
+}
+
+int
+marshal_write_alias(PyObject **buf, int *off, alias_ty o)
+{
+ int i;
+ marshal_write_identifier(buf, off, o->name);
+ if (o->asname) {
+ marshal_write_int(buf, off, 1);
+ marshal_write_identifier(buf, off, o->asname);
+ }
+ else {
+ marshal_write_int(buf, off, 0);
+ }
+ return 1;
+}
+