[Python-checkins] python/dist/src/Python Python-ast.c, 1.1.2.7,
1.1.2.8
jhylton at users.sourceforge.net
jhylton at users.sourceforge.net
Tue Apr 13 10:58:38 EDT 2004
Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16447/Python
Modified Files:
Tag: ast-branch
Python-ast.c
Log Message:
New version of generated AST code to include free routines.
The generated version was edited a little by hand to overcome the
current limitations of asdl_c.py.
Index: Python-ast.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/Attic/Python-ast.c,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -C2 -d -r1.1.2.7 -r1.1.2.8
*** Python-ast.c 28 Mar 2003 02:05:28 -0000 1.1.2.7
--- Python-ast.c 13 Apr 2004 14:58:35 -0000 1.1.2.8
***************
*** 1,3 ****
! /* File automatically generated by ../Parser/asdl_c.py */
#include "Python.h"
--- 1,3 ----
! /* File automatically generated by Parser/asdl_c.py */
#include "Python.h"
***************
*** 1041,1044 ****
--- 1041,1468 ----
}
+ void
+ free_mod(mod_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ switch (o->kind) {
+ case Module_kind:
+ seq = o->v.Module.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case Interactive_kind:
+ seq = o->v.Interactive.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case Expression_kind:
+ free_expr(o->v.Expression.body);
+ break;
+ case Suite_kind:
+ seq = o->v.Suite.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ }
+ }
+
+ void
+ free_stmt(stmt_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ switch (o->kind) {
+ case FunctionDef_kind:
+ Py_DECREF(o->v.FunctionDef.name);
+ free_arguments(o->v.FunctionDef.args);
+ seq = o->v.FunctionDef.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case ClassDef_kind:
+ Py_DECREF(o->v.ClassDef.name);
+ seq = o->v.ClassDef.bases;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ seq = o->v.ClassDef.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case Return_kind:
+ if (o->v.Return.value)
+ free_expr(o->v.Return.value);
+ break;
+ case Yield_kind:
+ free_expr(o->v.Yield.value);
+ break;
+ case Delete_kind:
+ seq = o->v.Delete.targets;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ break;
+ case Assign_kind:
+ seq = o->v.Assign.targets;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ free_expr(o->v.Assign.value);
+ break;
+ case AugAssign_kind:
+ free_expr(o->v.AugAssign.target);
+ free_operator(o->v.AugAssign.op);
+ free_expr(o->v.AugAssign.value);
+ break;
+ case Print_kind:
+ if (o->v.Print.dest)
+ free_expr(o->v.Print.dest);
+ seq = o->v.Print.values;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ break;
+ case For_kind:
+ free_expr(o->v.For.target);
+ free_expr(o->v.For.iter);
+ seq = o->v.For.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ seq = o->v.For.orelse;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case While_kind:
+ free_expr(o->v.While.test);
+ seq = o->v.While.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ seq = o->v.While.orelse;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case If_kind:
+ free_expr(o->v.If.test);
+ seq = o->v.If.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ seq = o->v.If.orelse;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case Raise_kind:
+ if (o->v.Raise.type)
+ free_expr(o->v.Raise.type);
+ if (o->v.Raise.inst)
+ free_expr(o->v.Raise.inst);
+ if (o->v.Raise.tback)
+ free_expr(o->v.Raise.tback);
+ break;
+ case TryExcept_kind:
+ seq = o->v.TryExcept.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ seq = o->v.TryExcept.handlers;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_excepthandler(asdl_seq_GET(seq, i));
+ seq = o->v.TryExcept.orelse;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case TryFinally_kind:
+ seq = o->v.TryFinally.body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ seq = o->v.TryFinally.finalbody;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ break;
+ case Assert_kind:
+ free_expr(o->v.Assert.test);
+ if (o->v.Assert.msg)
+ free_expr(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(asdl_seq_GET(seq, i));
+ break;
+ case ImportFrom_kind:
+ Py_DECREF(o->v.ImportFrom.module);
+ seq = o->v.ImportFrom.names;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_alias(asdl_seq_GET(seq, i));
+ break;
+ case Exec_kind:
+ free_expr(o->v.Exec.body);
+ if (o->v.Exec.globals)
+ free_expr(o->v.Exec.globals);
+ if (o->v.Exec.locals)
+ free_expr(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));
+ break;
+ case Expr_kind:
+ free_expr(o->v.Expr.value);
+ break;
+ case Pass_kind:
+ break;
+ case Break_kind:
+ break;
+ case Continue_kind:
+ break;
+ }
+ }
+
+ void
+ free_expr(expr_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ switch (o->kind) {
+ case BoolOp_kind:
+ free_boolop(o->v.BoolOp.op);
+ seq = o->v.BoolOp.values;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ break;
+ case BinOp_kind:
+ free_expr(o->v.BinOp.left);
+ free_operator(o->v.BinOp.op);
+ free_expr(o->v.BinOp.right);
+ break;
+ case UnaryOp_kind:
+ free_unaryop(o->v.UnaryOp.op);
+ free_expr(o->v.UnaryOp.operand);
+ break;
+ case Lambda_kind:
+ free_arguments(o->v.Lambda.args);
+ free_expr(o->v.Lambda.body);
+ break;
+ case Dict_kind:
+ seq = o->v.Dict.keys;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ seq = o->v.Dict.values;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ break;
+ case ListComp_kind:
+ free_expr(o->v.ListComp.elt);
+ seq = o->v.ListComp.generators;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_listcomp(asdl_seq_GET(seq, i));
+ break;
+ case Compare_kind:
+ free_expr(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));
+ seq = o->v.Compare.comparators;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ break;
+ case Call_kind:
+ free_expr(o->v.Call.func);
+ seq = o->v.Call.args;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ seq = o->v.Call.keywords;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_keyword(asdl_seq_GET(seq, i));
+ if (o->v.Call.starargs)
+ free_expr(o->v.Call.starargs);
+ if (o->v.Call.kwargs)
+ free_expr(o->v.Call.kwargs);
+ break;
+ case Repr_kind:
+ free_expr(o->v.Repr.value);
+ break;
+ case Num_kind:
+ Py_DECREF(o->v.Num.n);
+ break;
+ case Str_kind:
+ Py_DECREF(o->v.Str.s);
+ break;
+ case Attribute_kind:
+ free_expr(o->v.Attribute.value);
+ Py_DECREF(o->v.Attribute.attr);
+ free_expr_context(o->v.Attribute.ctx);
+ break;
+ case Subscript_kind:
+ free_expr(o->v.Subscript.value);
+ free_slice(o->v.Subscript.slice);
+ free_expr_context(o->v.Subscript.ctx);
+ break;
+ case Name_kind:
+ Py_DECREF(o->v.Name.id);
+ free_expr_context(o->v.Name.ctx);
+ break;
+ case List_kind:
+ seq = o->v.List.elts;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ free_expr_context(o->v.List.ctx);
+ break;
+ case Tuple_kind:
+ seq = o->v.Tuple.elts;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ free_expr_context(o->v.Tuple.ctx);
+ break;
+ }
+ }
+
+ void
+ free_expr_context(expr_context_ty o)
+ {
+ }
+
+ void
+ free_slice(slice_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ switch (o->kind) {
+ case Ellipsis_kind:
+ break;
+ case Slice_kind:
+ if (o->v.Slice.lower)
+ free_expr(o->v.Slice.lower);
+ if (o->v.Slice.upper)
+ free_expr(o->v.Slice.upper);
+ if (o->v.Slice.step)
+ free_expr(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(asdl_seq_GET(seq, i));
+ break;
+ case Index_kind:
+ free_expr(o->v.Index.value);
+ break;
+ }
+ }
+
+ void
+ free_boolop(boolop_ty o)
+ {
+ }
+
+ void
+ free_operator(operator_ty o)
+ {
+ }
+
+ void
+ free_unaryop(unaryop_ty o)
+ {
+ }
+
+ void
+ free_cmpop(cmpop_ty o)
+ {
+ }
+
+ void
+ free_listcomp(listcomp_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ free_expr(o->target);
+ free_expr(o->iter);
+ seq = o->ifs;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ }
+
+ void
+ free_excepthandler(excepthandler_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ if (o->type)
+ free_expr(o->type);
+ if (o->name)
+ free_expr(o->name);
+ seq = o->body;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_stmt(asdl_seq_GET(seq, i));
+ }
+
+ void
+ free_arguments(arguments_ty o)
+ {
+ int i, n;
+ asdl_seq *seq;
+ seq = o->args;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ if (o->vararg) {
+ Py_DECREF(o->vararg);
+ }
+ if (o->kwarg) {
+ Py_DECREF(o->kwarg);
+ }
+ seq = o->defaults;
+ n = asdl_seq_LEN(seq);
+ for (i = 0; i < n; i++)
+ free_expr(asdl_seq_GET(seq, i));
+ }
+
+ void
+ free_keyword(keyword_ty o)
+ {
+ Py_DECREF(o->arg);
+ free_expr(o->value);
+ }
+
+ void
+ free_alias(alias_ty o)
+ {
+ Py_DECREF(o->name);
+ if (o->asname) {
+ Py_DECREF(o->asname);
+ }
+ }
+
int
marshal_write_mod(PyObject **buf, int *off, mod_ty o)
More information about the Python-checkins
mailing list