Added count() method.
Changed some conditional INCREFs into XINCREFs.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 4026622..18bdbca 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -94,21 +94,18 @@
 {
 	register object *olditem;
 	if (!is_listobject(op)) {
-		if (newitem != NULL)
-			DECREF(newitem);
+		XDECREF(newitem);
 		err_badcall();
 		return -1;
 	}
 	if (i < 0 || i >= ((listobject *)op) -> ob_size) {
-		if (newitem != NULL)
-			DECREF(newitem);
+		XDECREF(newitem);
 		err_setstr(IndexError, "list assignment index out of range");
 		return -1;
 	}
 	olditem = ((listobject *)op) -> ob_item[i];
 	((listobject *)op) -> ob_item[i] = newitem;
-	if (olditem != NULL)
-		DECREF(olditem);
+	XDECREF(olditem);
 	return 0;
 }
 
@@ -177,8 +174,7 @@
 {
 	int i;
 	for (i = 0; i < op->ob_size; i++) {
-		if (op->ob_item[i] != NULL)
-			DECREF(op->ob_item[i]);
+		XDECREF(op->ob_item[i]);
 	}
 	if (op->ob_item != NULL)
 		free((ANY *)op->ob_item);
@@ -552,6 +548,25 @@
 }
 
 static object *
+listcount(self, args)
+	listobject *self;
+	object *args;
+{
+	int count = 0;
+	int i;
+	
+	if (args == NULL) {
+		err_badarg();
+		return NULL;
+	}
+	for (i = 0; i < self->ob_size; i++) {
+		if (cmpobject(self->ob_item[i], args) == 0)
+			count++;
+	}
+	return newintobject((long)count);
+}
+
+static object *
 listremove(self, args)
 	listobject *self;
 	object *args;
@@ -577,6 +592,7 @@
 
 static struct methodlist list_methods[] = {
 	{"append",	listappend},
+	{"count",	listcount},
 	{"index",	listindex},
 	{"insert",	listinsert},
 	{"sort",	listsort},