[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