[Python-checkins] r42379 - in python/branches/ast-objects: Include/Python-ast.h Parser/asdl_c.py Python/Python-ast.c Python/ast.c Python/compile.c Python/pythonrun.c Python/symtable.c

neal.norwitz python-checkins at python.org
Wed Feb 15 08:00:24 CET 2006


Author: neal.norwitz
Date: Wed Feb 15 08:00:21 2006
New Revision: 42379

Modified:
   python/branches/ast-objects/Include/Python-ast.h
   python/branches/ast-objects/Parser/asdl_c.py
   python/branches/ast-objects/Python/Python-ast.c
   python/branches/ast-objects/Python/ast.c
   python/branches/ast-objects/Python/compile.c
   python/branches/ast-objects/Python/pythonrun.c
   python/branches/ast-objects/Python/symtable.c
Log:
Further updates from Simon Burton.  Runs now, lots of refleaks still.

Modified: python/branches/ast-objects/Include/Python-ast.h
==============================================================================
--- python/branches/ast-objects/Include/Python-ast.h	(original)
+++ python/branches/ast-objects/Include/Python-ast.h	Wed Feb 15 08:00:21 2006
@@ -11,7 +11,8 @@
 
 struct _mod{
         PyObject_HEAD
-        enum {Module_kind, Interactive_kind, Expression_kind, Suite_kind} _kind;
+        enum {mod_Dummy_kind, Module_kind, Interactive_kind, Expression_kind,
+               Suite_kind} _kind;
 };
 #define mod_kind(o) (((struct _mod*)o)->_kind)
 
@@ -64,12 +65,12 @@
 
 struct _stmt{
         PyObject_HEAD
-        enum {FunctionDef_kind, ClassDef_kind, Return_kind, Delete_kind,
-               Assign_kind, AugAssign_kind, Print_kind, For_kind, While_kind,
-               If_kind, Raise_kind, TryExcept_kind, TryFinally_kind,
-               Assert_kind, Import_kind, ImportFrom_kind, Exec_kind,
-               Global_kind, Expr_kind, Pass_kind, Break_kind, Continue_kind}
-               _kind;
+        enum {stmt_Dummy_kind, FunctionDef_kind, ClassDef_kind, Return_kind,
+               Delete_kind, Assign_kind, AugAssign_kind, Print_kind, For_kind,
+               While_kind, If_kind, Raise_kind, TryExcept_kind,
+               TryFinally_kind, Assert_kind, Import_kind, ImportFrom_kind,
+               Exec_kind, Global_kind, Expr_kind, Pass_kind, Break_kind,
+               Continue_kind} _kind;
         int lineno;
 };
 #define stmt_kind(o) (((struct _stmt*)o)->_kind)
@@ -367,10 +368,11 @@
 
 struct _expr{
         PyObject_HEAD
-        enum {BoolOp_kind, BinOp_kind, UnaryOp_kind, Lambda_kind, Dict_kind,
-               ListComp_kind, GeneratorExp_kind, Yield_kind, Compare_kind,
-               Call_kind, Repr_kind, Num_kind, Str_kind, Attribute_kind,
-               Subscript_kind, Name_kind, List_kind, Tuple_kind} _kind;
+        enum {expr_Dummy_kind, BoolOp_kind, BinOp_kind, UnaryOp_kind,
+               Lambda_kind, Dict_kind, ListComp_kind, GeneratorExp_kind,
+               Yield_kind, Compare_kind, Call_kind, Repr_kind, Num_kind,
+               Str_kind, Attribute_kind, Subscript_kind, Name_kind, List_kind,
+               Tuple_kind} _kind;
         int lineno;
 };
 #define expr_kind(o) (((struct _expr*)o)->_kind)
@@ -621,8 +623,8 @@
 
 struct _expr_context{
         PyObject_HEAD
-        enum {Load_kind, Store_kind, Del_kind, AugLoad_kind, AugStore_kind,
-               Param_kind} _kind;
+        enum {expr_context_Dummy_kind, Load_kind, Store_kind, Del_kind,
+               AugLoad_kind, AugStore_kind, Param_kind} _kind;
 };
 #define expr_context_kind(o) (((struct _expr_context*)o)->_kind)
 
@@ -685,7 +687,8 @@
 
 struct _slice{
         PyObject_HEAD
-        enum {Ellipsis_kind, Slice_kind, ExtSlice_kind, Index_kind} _kind;
+        enum {slice_Dummy_kind, Ellipsis_kind, Slice_kind, ExtSlice_kind,
+               Index_kind} _kind;
 };
 #define slice_kind(o) (((struct _slice*)o)->_kind)
 
@@ -740,7 +743,7 @@
 
 struct _boolop{
         PyObject_HEAD
-        enum {And_kind, Or_kind} _kind;
+        enum {boolop_Dummy_kind, And_kind, Or_kind} _kind;
 };
 #define boolop_kind(o) (((struct _boolop*)o)->_kind)
 
@@ -767,9 +770,9 @@
 
 struct _operator{
         PyObject_HEAD
-        enum {Add_kind, Sub_kind, Mult_kind, Div_kind, Mod_kind, Pow_kind,
-               LShift_kind, RShift_kind, BitOr_kind, BitXor_kind, BitAnd_kind,
-               FloorDiv_kind} _kind;
+        enum {operator_Dummy_kind, Add_kind, Sub_kind, Mult_kind, Div_kind,
+               Mod_kind, Pow_kind, LShift_kind, RShift_kind, BitOr_kind,
+               BitXor_kind, BitAnd_kind, FloorDiv_kind} _kind;
 };
 #define operator_kind(o) (((struct _operator*)o)->_kind)
 
@@ -886,7 +889,8 @@
 
 struct _unaryop{
         PyObject_HEAD
-        enum {Invert_kind, Not_kind, UAdd_kind, USub_kind} _kind;
+        enum {unaryop_Dummy_kind, Invert_kind, Not_kind, UAdd_kind, USub_kind}
+               _kind;
 };
 #define unaryop_kind(o) (((struct _unaryop*)o)->_kind)
 
@@ -931,8 +935,9 @@
 
 struct _cmpop{
         PyObject_HEAD
-        enum {Eq_kind, NotEq_kind, Lt_kind, LtE_kind, Gt_kind, GtE_kind,
-               Is_kind, IsNot_kind, In_kind, NotIn_kind} _kind;
+        enum {cmpop_Dummy_kind, Eq_kind, NotEq_kind, Lt_kind, LtE_kind,
+               Gt_kind, GtE_kind, Is_kind, IsNot_kind, In_kind, NotIn_kind}
+               _kind;
 };
 #define cmpop_kind(o) (((struct _cmpop*)o)->_kind)
 

Modified: python/branches/ast-objects/Parser/asdl_c.py
==============================================================================
--- python/branches/ast-objects/Parser/asdl_c.py	(original)
+++ python/branches/ast-objects/Parser/asdl_c.py	Wed Feb 15 08:00:21 2006
@@ -155,7 +155,8 @@
         self.emit_check(name, depth)
         emit("struct _%s{" % name)
         emit("PyObject_HEAD", depth + 1)
-        names = [t.name.value+"_kind" for t in sum.types]
+        names = ["%s_Dummy_kind"%name]
+        names += [t.name.value+"_kind" for t in sum.types]
         emit("enum {%s} _kind;" % ", ".join(names), depth+1)
         for field in sum.attributes:
             type = str(field.type)
@@ -225,7 +226,7 @@
     def check(self, t):
         t = t.value
         if t in ("identifier", "string"):
-            return "PyString_Check"
+            return "string_Check"
         elif t == "bool":
             return "PyBool_Check"
         else:
@@ -354,7 +355,7 @@
             emit("struct _%s *obj = (struct _%s*)_obj;" % (name,name))
         if has_seq:
             emit("int i;")
-        for  f in fields:
+        for f in fields:
             if f.seq:
                 self.emit_seq_check(f)
             elif f.opt:
@@ -384,6 +385,8 @@
         for t in sum.types:
             emit("case %s_kind:" % t.name)
             emit("    return %s_validate(_obj);" % t.name)
+        emit("default:")
+        emit("    break;")
         depth = 1
         emit("}")
         emit('PyErr_SetString(PyExc_TypeError, "invalid _kind in %s");' % name)
@@ -500,11 +503,12 @@
 static void failed_check(const char* field, const char* expected,
                          PyObject *real)
 {
-    PyErr_Format(PyExc_TypeError, "invalid %s: excpected %s, found %s",
+    PyErr_Format(PyExc_TypeError, "invalid %s: expected %s, found %s",
                  field, expected, real->ob_type->tp_name);
 }
 /* Convenience macro to simplify asdl_c.py */
 #define object_Check(x) 1
+#define string_Check(x) (PyString_Check(x)||PyUnicode_Check(x))
 """
 
 def main(srcfile):

Modified: python/branches/ast-objects/Python/Python-ast.c
==============================================================================
--- python/branches/ast-objects/Python/Python-ast.c	(original)
+++ python/branches/ast-objects/Python/Python-ast.c	Wed Feb 15 08:00:21 2006
@@ -7,11 +7,12 @@
 static void failed_check(const char* field, const char* expected,
                          PyObject *real)
 {
-    PyErr_Format(PyExc_TypeError, "invalid %s: excpected %s, found %s",
+    PyErr_Format(PyExc_TypeError, "invalid %s: expected %s, found %s",
                  field, expected, real->ob_type->tp_name);
 }
 /* Convenience macro to simplify asdl_c.py */
 #define object_Check(x) 1
+#define string_Check(x) (PyString_Check(x)||PyUnicode_Check(x))
 
 static int mod_validate(PyObject*);
 static int Module_validate(PyObject*);
@@ -169,6 +170,8 @@
                     return Expression_validate(_obj);
                 case Suite_kind:
                     return Suite_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in mod");
         return -1;
@@ -601,6 +604,8 @@
                     return Break_validate(_obj);
                 case Continue_kind:
                     return Continue_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in stmt");
         return -1;
@@ -689,7 +694,7 @@
 {
         struct _FunctionDef *obj = (struct _FunctionDef*)_obj;
         int i;
-        if (!PyString_Check(obj->name)) {
+        if (!string_Check(obj->name)) {
             failed_check("name", "identifier", obj->name);
             return -1;
         }
@@ -805,7 +810,7 @@
 {
         struct _ClassDef *obj = (struct _ClassDef*)_obj;
         int i;
-        if (!PyString_Check(obj->name)) {
+        if (!string_Check(obj->name)) {
             failed_check("name", "identifier", obj->name);
             return -1;
         }
@@ -2240,7 +2245,7 @@
 {
         struct _ImportFrom *obj = (struct _ImportFrom*)_obj;
         int i;
-        if (!PyString_Check(obj->module)) {
+        if (!string_Check(obj->module)) {
             failed_check("module", "identifier", obj->module);
             return -1;
         }
@@ -2441,7 +2446,7 @@
            return -1;
         }
         for(i = 0; i < PyList_Size(obj->names); i++) {
-                if (!PyString_Check(PyList_GET_ITEM(obj->names, i))) {
+                if (!string_Check(PyList_GET_ITEM(obj->names, i))) {
                     failed_check("names", "identifier",
                                  PyList_GET_ITEM(obj->names, i));
                     return -1;
@@ -2817,6 +2822,8 @@
                     return List_validate(_obj);
                 case Tuple_kind:
                     return Tuple_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in expr");
         return -1;
@@ -4026,7 +4033,7 @@
 Str_validate(PyObject *_obj)
 {
         struct _Str *obj = (struct _Str*)_obj;
-        if (!PyString_Check(obj->s)) {
+        if (!string_Check(obj->s)) {
             failed_check("s", "string", obj->s);
             return -1;
         }
@@ -4112,7 +4119,7 @@
             failed_check("value", "expr", obj->value);
             return -1;
         }
-        if (!PyString_Check(obj->attr)) {
+        if (!string_Check(obj->attr)) {
             failed_check("attr", "identifier", obj->attr);
             return -1;
         }
@@ -4285,7 +4292,7 @@
 Name_validate(PyObject *_obj)
 {
         struct _Name *obj = (struct _Name*)_obj;
-        if (!PyString_Check(obj->id)) {
+        if (!string_Check(obj->id)) {
             failed_check("id", "identifier", obj->id);
             return -1;
         }
@@ -4547,6 +4554,8 @@
                     return AugStore_validate(_obj);
                 case Param_kind:
                     return Param_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in expr_context");
         return -1;
@@ -5012,6 +5021,8 @@
                     return ExtSlice_validate(_obj);
                 case Index_kind:
                     return Index_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in slice");
         return -1;
@@ -5410,6 +5421,8 @@
                     return And_validate(_obj);
                 case Or_kind:
                     return Or_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in boolop");
         return -1;
@@ -5623,6 +5636,8 @@
                     return BitAnd_validate(_obj);
                 case FloorDiv_kind:
                     return FloorDiv_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in operator");
         return -1;
@@ -6490,6 +6505,8 @@
                     return UAdd_validate(_obj);
                 case USub_kind:
                     return USub_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in unaryop");
         return -1;
@@ -6833,6 +6850,8 @@
                     return In_validate(_obj);
                 case NotIn_kind:
                     return NotIn_validate(_obj);
+                default:
+                    break;
         }
         PyErr_SetString(PyExc_TypeError, "invalid _kind in cmpop");
         return -1;
@@ -7822,12 +7841,12 @@
                     return -1;
         }
         if (obj->vararg == Py_None) /* empty */;
-        else if (!PyString_Check(obj->vararg)) {
+        else if (!string_Check(obj->vararg)) {
             failed_check("vararg", "identifier", obj->vararg);
             return -1;
         }
         if (obj->kwarg == Py_None) /* empty */;
-        else if (!PyString_Check(obj->kwarg)) {
+        else if (!string_Check(obj->kwarg)) {
             failed_check("kwarg", "identifier", obj->kwarg);
             return -1;
         }
@@ -7917,7 +7936,7 @@
 keyword_validate(PyObject *_obj)
 {
         struct _keyword *obj = (struct _keyword*)_obj;
-        if (!PyString_Check(obj->arg)) {
+        if (!string_Check(obj->arg)) {
             failed_check("arg", "identifier", obj->arg);
             return -1;
         }
@@ -8002,12 +8021,12 @@
 alias_validate(PyObject *_obj)
 {
         struct _alias *obj = (struct _alias*)_obj;
-        if (!PyString_Check(obj->name)) {
+        if (!string_Check(obj->name)) {
             failed_check("name", "identifier", obj->name);
             return -1;
         }
         if (obj->asname == Py_None) /* empty */;
-        else if (!PyString_Check(obj->asname)) {
+        else if (!string_Check(obj->asname)) {
             failed_check("asname", "identifier", obj->asname);
             return -1;
         }

Modified: python/branches/ast-objects/Python/ast.c
==============================================================================
--- python/branches/ast-objects/Python/ast.c	(original)
+++ python/branches/ast-objects/Python/ast.c	Wed Feb 15 08:00:21 2006
@@ -750,7 +750,7 @@
     if (!load)
         goto error;
     e = Name(id, load, LINENO(n));
-    if (!result)
+    if (!e)
         goto error;
     id = NULL;
 
@@ -1712,8 +1712,10 @@
  loop:
     switch (TYPE(n)) {
         case test:
-            if (TYPE(CHILD(n, 0)) == lambdef)
+            if (TYPE(CHILD(n, 0)) == lambdef) {
                 result = ast_for_lambdef(c, CHILD(n, 0));
+                break;
+            }
             /* Fall through to and_test */
         case and_test:
             if (NCH(n) == 1) {
@@ -1832,9 +1834,10 @@
                 case TILDE:
                     result = UnaryOp(Invert(), expression, LINENO(n));
                     break;
+                default:
+                    PyErr_Format(PyExc_SystemError, "unhandled factor: %d",
+                                 TYPE(CHILD(n, 0)));
             }
-            PyErr_Format(PyExc_SystemError, "unhandled factor: %d",
-                             TYPE(CHILD(n, 0)));
             break;
         }
         case power:
@@ -2352,7 +2355,7 @@
             }
             else {
                 a = alias_for_import_name(CHILD(n, 0));
-                assert(!alias_asname(a));
+                assert(alias_asname(a) == Py_None);
                 alias_asname(a) = NEW_IDENTIFIER(CHILD(n, 2));
                 result = a;
             }

Modified: python/branches/ast-objects/Python/compile.c
==============================================================================
--- python/branches/ast-objects/Python/compile.c	(original)
+++ python/branches/ast-objects/Python/compile.c	Wed Feb 15 08:00:21 2006
@@ -1672,7 +1672,7 @@
 	int i; \
 	PyObject *seq = (SEQ); /* avoid variable capture */ \
 	for (i = 0; i < PyList_GET_SIZE(seq); i++) { \
-		/*TYPE ## _ty*/ PyObject *elt = PyList_GET_ITEM(seq, i); \
+		PyObject *elt = PyList_GET_ITEM(seq, i); \
 		if (!compiler_visit_ ## TYPE((C), elt)) \
 			return 0; \
 	} \
@@ -1682,7 +1682,7 @@
 	int i; \
 	PyObject *seq = (SEQ); /* avoid variable capture */ \
 	for (i = 0; i < PyList_GET_SIZE(seq); i++) { \
-		/*TYPE ## _ty*/PyObject *elt = PyList_GET_ITEM(seq, i); \
+		PyObject *elt = PyList_GET_ITEM(seq, i); \
 		if (!compiler_visit_ ## TYPE((C), elt)) { \
 			compiler_exit_scope(c); \
 			return 0; \
@@ -2016,8 +2016,7 @@
 			return 0;
 	}
 
-	if (arguments_defaults(args))
-		VISIT_SEQ(c, expr, arguments_defaults(args));
+	VISIT_SEQ(c, expr, arguments_defaults(args));
 	if (!compiler_enter_scope(c, name, (void *)e, ((struct _expr*)e)->lineno))
 		return 0;
 
@@ -2332,7 +2331,7 @@
 		except = compiler_new_block(c);
 		if (except == NULL)
 			return 0;
-		if (excepthandler_type(handler)) {
+		if (excepthandler_type(handler) != Py_None) {
 			ADDOP(c, DUP_TOP);
 			VISIT(c, expr, excepthandler_type(handler));
 			ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
@@ -2340,7 +2339,7 @@
 			ADDOP(c, POP_TOP);
 		}
 		ADDOP(c, POP_TOP);
-		if (excepthandler_name(handler)) {
+		if (excepthandler_name(handler) != Py_None) {
 			VISIT(c, expr, excepthandler_name(handler));
 		}
 		else {
@@ -2350,7 +2349,7 @@
 		VISIT_SEQ(c, stmt, excepthandler_body(handler));
 		ADDOP_JREL(c, JUMP_FORWARD, end);
 		compiler_use_next_block(c, except);
-		if (excepthandler_type(handler))
+		if (excepthandler_type(handler) != Py_None)
 			ADDOP(c, POP_TOP);
 	}
 	ADDOP(c, END_FINALLY);
@@ -2628,6 +2627,8 @@
 		break;
         case Continue_kind:
 		return compiler_continue(c);
+        default:
+		assert(0);
 	}
 	return 1;
 }
@@ -2644,6 +2645,8 @@
 		return UNARY_POSITIVE;
 	case USub_kind:
 		return UNARY_NEGATIVE;
+        default:
+		assert(0);
 	}
 	return 0;
 }
@@ -2679,6 +2682,8 @@
 		return BINARY_AND;
 	case FloorDiv_kind:
 		return BINARY_FLOOR_DIVIDE;
+        default:
+		assert(0);
 	}
 	return 0;
 }
@@ -2707,6 +2712,8 @@
 		return PyCmp_IN;
 	case NotIn_kind:
 		return PyCmp_NOT_IN;
+        default:
+		assert(0);
 	}
 	return PyCmp_BAD;
 }
@@ -2742,6 +2749,8 @@
 		return INPLACE_AND;
 	case FloorDiv_kind:
 		return INPLACE_FLOOR_DIVIDE;
+        default:
+		assert(0);
 	}
 	PyErr_Format(PyExc_SystemError,
 		     "inplace binary op %d should not be possible",
@@ -2819,6 +2828,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for deref variable");
 			return 0;
+		default:
+			assert(0);
 		}
 		break;
 	case OP_FAST:
@@ -2833,6 +2844,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for local variable");
 			return 0;
+		default:
+			assert(0);
 		}
 		ADDOP_O(c, op, mangled, varnames);
 		Py_DECREF(mangled);
@@ -2849,6 +2862,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for global variable");
 			return 0;
+		default:
+			assert(0);
 		}
 		break;
 	case OP_NAME:
@@ -2863,6 +2878,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for name variable");
 			return 0;
+		default:
+			assert(0);
 		}
 		break;
 	}
@@ -3346,6 +3363,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid in attribute expression");
 			return 0;
+		default:
+			assert(0);
 		}
 		break;
         case Subscript_kind:
@@ -3373,6 +3392,8 @@
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid in subscript expression");
 			return 0;
+		default:
+			assert(0);
 		}
 		break;
         case Name_kind:
@@ -3382,6 +3403,8 @@
 		return compiler_list(c, e);
         case Tuple_kind:
 		return compiler_tuple(c, e);
+	default:
+		assert(0);
 	}
 	return 1;
 }
@@ -3395,7 +3418,7 @@
 	assert(stmt_kind(s) == AugAssign_kind);
 
 	switch (expr_kind(e)) {
-                case Attribute_kind:
+	case Attribute_kind:
 		auge = Attribute(Attribute_value(e), Attribute_attr(e),
 				 AugLoad(), ((struct _expr*)e)->lineno);
                 if (auge == NULL)
@@ -3500,6 +3523,8 @@
                                 "invalid %s kind %d in subscript\n", 
                                 kind, expr_context_kind(ctx));
                         return 0;
+		default:
+			assert(0);
         }
         if (expr_context_kind(ctx) == AugLoad_kind) {
                 ADDOP_I(c, DUP_TOPX, 2);
@@ -3545,7 +3570,7 @@
 {
 	int op = 0, slice_offset = 0, stack_count = 0;
 
-	assert(Slice_step(s) == NULL);
+	assert(Slice_step(s) == Py_None);
 	if (Slice_lower(s) != Py_None) {
 		slice_offset++;
 		stack_count++;
@@ -3584,6 +3609,8 @@
 		PyErr_SetString(PyExc_SystemError,
 				"param invalid in simple slice");
 		return 0;
+	default:
+		assert(0);
 	}
 
 	ADDOP(c, op + slice_offset);
@@ -3608,6 +3635,8 @@
 		PyErr_SetString(PyExc_SystemError,
 				"extended slice invalid in nested slice");
 		return 0;
+	default:
+		assert(0);
 	}
 	return 1;
 }
@@ -3646,6 +3675,8 @@
                 if (expr_context_kind(ctx) != AugStore_kind)
 			VISIT(c, expr, Index_value(s));
                 return compiler_handle_subscr(c, "index", ctx);
+	default:
+		assert(0);
 	}
 	return 1;
 }

Modified: python/branches/ast-objects/Python/pythonrun.c
==============================================================================
--- python/branches/ast-objects/Python/pythonrun.c	(original)
+++ python/branches/ast-objects/Python/pythonrun.c	Wed Feb 15 08:00:21 2006
@@ -1159,7 +1159,7 @@
 	PyObject *ret;
 	PyObject *mod = PyParser_ASTFromString(str, "<string>", start, flags);
 	ret = run_err_mod(mod, "<string>", globals, locals, flags);
-	Py_DECREF(mod);
+	Py_XDECREF(mod);
 	return ret;
 }
 

Modified: python/branches/ast-objects/Python/symtable.c
==============================================================================
--- python/branches/ast-objects/Python/symtable.c	(original)
+++ python/branches/ast-objects/Python/symtable.c	Wed Feb 15 08:00:21 2006
@@ -240,6 +240,8 @@
 		PyErr_SetString(PyExc_RuntimeError,
 				"this compiler does not handle Suites");
 		goto error;
+	default:
+		assert(0);
 	}
 	if (!symtable_exit_block(st, (void *)mod)) {
 		PySymtable_Free(st);
@@ -1046,6 +1048,8 @@
         case Continue_kind:
 		/* nothing to do here */
 		break;
+	default:
+		assert(0);
 	}
 	return 1;
 }
@@ -1148,6 +1152,8 @@
         case Tuple_kind:
 		VISIT_SEQ(st, expr, Tuple_elts(e));
 		break;
+	default:
+		assert(0);
 	}
 	return 1;
 }
@@ -1265,7 +1271,7 @@
 	   dotted package name (e.g. spam.eggs) 
 	*/
 	PyObject *store_name;
-	PyObject *name = (alias_asname(a) == NULL) ? alias_name(a) : alias_asname(a);
+	PyObject *name = (alias_asname(a) == Py_None) ? alias_name(a) : alias_asname(a);
 	const char *base = PyString_AS_STRING(name);
 	char *dot = strchr(base, '.');
 	if (dot)
@@ -1332,6 +1338,8 @@
 		break;
 	case Ellipsis_kind:
 		break;
+	default:
+		assert(0);
 	}
 	return 1;
 }


More information about the Python-checkins mailing list