generate py3k warnings on __getslice__, __delslice__, and __setslice__

Reviewer: Brett Cannon
diff --git a/Objects/classobject.c b/Objects/classobject.c
index caf6b3e..7d3d048 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -1174,8 +1174,15 @@
 		if (func == NULL)
 			return NULL;
 		arg = Py_BuildValue("(N)", _PySlice_FromIndices(i, j));
-	} else
+	}
+	else {
+		if (PyErr_WarnPy3k("in 3.x, __getslice__ has been removed; "
+				   "use __getitem__", 1) < 0) {
+			Py_DECREF(func);
+			return NULL;
+		}
 		arg = Py_BuildValue("(nn)", i, j);
+	}
 
 	if (arg == NULL) {
 		Py_DECREF(func);
@@ -1257,8 +1264,15 @@
 
 			arg = Py_BuildValue("(N)",
 					    _PySlice_FromIndices(i, j));
-		} else
+		}
+		else {
+			if (PyErr_WarnPy3k("in 3.x, __delslice__ has been "
+				            "removed; use __delitem__", 1) < 0) {
+				Py_DECREF(func);
+				return -1;
+			}
 			arg = Py_BuildValue("(nn)", i, j);
+		}
 	}
 	else {
 		if (setslicestr == NULL) {
@@ -1284,8 +1298,15 @@
 
 			arg = Py_BuildValue("(NO)",
 					    _PySlice_FromIndices(i, j), value);
-		} else
+		}
+		else {
+			if (PyErr_WarnPy3k("in 3.x, __setslice__ has been "
+					   "removed; use __setitem__", 1) < 0) {
+				Py_DECREF(func);
+				return -1;
+			}
 			arg = Py_BuildValue("(nnO)", i, j, value);
+		}
 	}
 	if (arg == NULL) {
 		Py_DECREF(func);
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 42974f8..02b5012 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4897,7 +4897,17 @@
 	return NULL;
 }
 
-SLOT2(slot_sq_slice, "__getslice__", Py_ssize_t, Py_ssize_t, "nn")
+static PyObject*
+slot_sq_slice(PyObject *self, Py_ssize_t i, Py_ssize_t j)
+{
+	static PyObject *getslice_str;
+	
+	if (PyErr_WarnPy3k("in 3.x, __getslice__ has been removed; "
+			    "use __getitem__", 1) < 0)
+		return NULL;
+	return call_method(self, "__getslice__", &getslice_str,
+		"nn", i, j);
+}
 
 static int
 slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
@@ -4922,13 +4932,21 @@
 {
 	PyObject *res;
 	static PyObject *delslice_str, *setslice_str;
-
-	if (value == NULL)
+	
+	if (value == NULL) {
+		if (PyErr_WarnPy3k("in 3.x, __delslice__ has been removed; "
+				   "use __delitem__", 1) < 0)
+			return -1;
 		res = call_method(self, "__delslice__", &delslice_str,
 				  "(nn)", i, j);
-	else
+	}
+	else {
+		if (PyErr_WarnPy3k("in 3.x, __setslice__ has been removed; "
+					"use __setitem__", 1) < 0)
+			return -1;		
 		res = call_method(self, "__setslice__", &setslice_str,
-				  "(nnO)", i, j, value);
+			  "(nnO)", i, j, value);
+	}
 	if (res == NULL)
 		return -1;
 	Py_DECREF(res);